Data Exploration and Wrangling
The first step in performing a machine learning analysis is to explore the data to better understand the variables included in the data, as we may learn about important details about the data that we should keep in mind as we try to predict our outcome variable.
First let’s just get a general sense of our data. We can do that using the glimpse() function of the dplyr package (it is also in the tibble package).
We will also use the %>% pipe which can be used to define the input for later sequential steps. This will make more sense when we have multiple sequential steps using the same data object. To use the pipe notation we need to install and load dplyr as well.
For example here we will first grab the pm data object, then we use the glimpse() function on it based on the pipe notation.
Observations: 876
Variables: 50
$ id <dbl> 1003.001, 1027.000, 1033.100, 1049.1…
$ value <dbl> 9.597647, 10.800000, 11.212174, 11.6…
$ fips <dbl> 1003, 1027, 1033, 1049, 1055, 1069, …
$ lat <dbl> 30.49800, 33.28126, 34.75878, 34.287…
$ lon <dbl> -87.88141, -85.80218, -87.65056, -85…
$ state <chr> "Alabama", "Alabama", "Alabama", "Al…
$ county <chr> "Baldwin", "Clay", "Colbert", "DeKal…
$ city <chr> "Fairhope", "Ashland", "Muscle Shoal…
$ CMAQ <dbl> 8.098836, 9.766208, 9.402679, 8.5347…
$ zcta <dbl> 36532, 36251, 35660, 35962, 35901, 3…
$ zcta_area <dbl> 190980522, 374132430, 16716984, 2038…
$ zcta_pop <dbl> 27829, 5103, 9042, 8300, 20045, 3021…
$ imp_a500 <dbl> 0.01730104, 1.96972318, 19.17301038,…
$ imp_a1000 <dbl> 1.4096021, 0.8531574, 11.1448962, 3.…
$ imp_a5000 <dbl> 3.3360118, 0.9851479, 15.1786154, 1.…
$ imp_a10000 <dbl> 1.9879187, 0.5208189, 9.7253870, 1.0…
$ imp_a15000 <dbl> 1.4386207, 0.3359198, 5.2472094, 0.9…
$ county_area <dbl> 4117521611, 1564252280, 1534877333, …
$ county_pop <dbl> 182265, 13932, 54428, 71109, 104430,…
$ log_dist_to_prisec <dbl> 4.648181, 7.219907, 5.760131, 3.7214…
$ log_pri_length_5000 <dbl> 8.517193, 8.517193, 8.517193, 8.5171…
$ log_pri_length_10000 <dbl> 9.210340, 9.210340, 9.274303, 10.409…
$ log_pri_length_15000 <dbl> 9.630228, 9.615805, 9.658899, 11.173…
$ log_pri_length_25000 <dbl> 11.32735, 10.12663, 10.15769, 11.909…
$ log_prisec_length_500 <dbl> 7.295356, 6.214608, 8.611945, 7.3101…
$ log_prisec_length_1000 <dbl> 8.195119, 7.600902, 9.735569, 8.5858…
$ log_prisec_length_5000 <dbl> 10.815042, 10.170878, 11.770407, 10.…
$ log_prisec_length_10000 <dbl> 11.88680, 11.40554, 12.84066, 11.508…
$ log_prisec_length_15000 <dbl> 12.205723, 12.042963, 13.282656, 12.…
$ log_prisec_length_25000 <dbl> 13.41395, 12.79980, 13.79973, 13.559…
$ log_nei_2008_pm25_sum_10000 <dbl> 0.318035438, 3.218632928, 6.57312730…
$ log_nei_2008_pm25_sum_15000 <dbl> 1.967358961, 3.218632928, 6.58191745…
$ log_nei_2008_pm25_sum_25000 <dbl> 5.067308, 3.218633, 6.875900, 4.8876…
$ log_nei_2008_pm10_sum_10000 <dbl> 1.35588511, 3.31111648, 6.69187313, …
$ log_nei_2008_pm10_sum_15000 <dbl> 2.26783411, 3.31111648, 6.70127741, …
$ log_nei_2008_pm10_sum_25000 <dbl> 5.628728, 3.311116, 7.148858, 5.1719…
$ popdens_county <dbl> 44.265706, 8.906492, 35.460814, 35.3…
$ popdens_zcta <dbl> 145.716431, 13.639555, 540.887040, 4…
$ nohs <dbl> 3.3, 11.6, 7.3, 14.3, 4.3, 5.8, 7.1,…
$ somehs <dbl> 4.9, 19.1, 15.8, 16.7, 13.3, 11.6, 1…
$ hs <dbl> 25.1, 33.9, 30.6, 35.0, 27.8, 29.8, …
$ somecollege <dbl> 19.7, 18.8, 20.9, 14.9, 29.2, 21.4, …
$ associate <dbl> 8.2, 8.0, 7.6, 5.5, 10.1, 7.9, 7.3, …
$ bachelor <dbl> 25.3, 5.5, 12.7, 7.9, 10.0, 13.7, 5.…
$ grad <dbl> 13.5, 3.1, 5.1, 5.8, 5.4, 9.8, 2.0, …
$ pov <dbl> 6.1, 19.5, 19.0, 13.8, 8.8, 15.6, 25…
$ hs_orless <dbl> 33.3, 64.6, 53.7, 66.0, 45.4, 47.2, …
$ urc2013 <dbl> 4, 6, 4, 6, 4, 4, 1, 1, 1, 1, 1, 1, …
$ urc2006 <dbl> 5, 6, 4, 5, 4, 4, 1, 1, 1, 1, 1, 1, …
$ aod <dbl> 37.36364, 34.81818, 36.00000, 33.083…
We can see that there are 876 monitors and that we have 50 total variables - one of which is the outcome. In this case our outcome variable is called value.
Notice that some of the variables that we would think of as factors (categorical) are currently of class double as indicated by the <dbl> just to the right of the column names/variable names in the glimpse() output. For example the monitor ID (id), the Federal Information Processing Standard number for the county where the monitor was located (fips), as well as the zcta
Let’s convert these variables into factors. We can do this using the mutate_at() function of the dplyr package and the as.factor() base function.
In this case we are also using the magrittr assignment pipe or double pipe that looks like this %<>% of the magrittr package. This allows us use the pm data as input but also reassign the output to the same data object name.
Observations: 876
Variables: 50
$ id <fct> 1003.001, 1027.0001, 1033.1002, 1049…
$ value <dbl> 9.597647, 10.800000, 11.212174, 11.6…
$ fips <fct> 1003, 1027, 1033, 1049, 1055, 1069, …
$ lat <dbl> 30.49800, 33.28126, 34.75878, 34.287…
$ lon <dbl> -87.88141, -85.80218, -87.65056, -85…
$ state <chr> "Alabama", "Alabama", "Alabama", "Al…
$ county <chr> "Baldwin", "Clay", "Colbert", "DeKal…
$ city <chr> "Fairhope", "Ashland", "Muscle Shoal…
$ CMAQ <dbl> 8.098836, 9.766208, 9.402679, 8.5347…
$ zcta <fct> 36532, 36251, 35660, 35962, 35901, 3…
$ zcta_area <dbl> 190980522, 374132430, 16716984, 2038…
$ zcta_pop <dbl> 27829, 5103, 9042, 8300, 20045, 3021…
$ imp_a500 <dbl> 0.01730104, 1.96972318, 19.17301038,…
$ imp_a1000 <dbl> 1.4096021, 0.8531574, 11.1448962, 3.…
$ imp_a5000 <dbl> 3.3360118, 0.9851479, 15.1786154, 1.…
$ imp_a10000 <dbl> 1.9879187, 0.5208189, 9.7253870, 1.0…
$ imp_a15000 <dbl> 1.4386207, 0.3359198, 5.2472094, 0.9…
$ county_area <dbl> 4117521611, 1564252280, 1534877333, …
$ county_pop <dbl> 182265, 13932, 54428, 71109, 104430,…
$ log_dist_to_prisec <dbl> 4.648181, 7.219907, 5.760131, 3.7214…
$ log_pri_length_5000 <dbl> 8.517193, 8.517193, 8.517193, 8.5171…
$ log_pri_length_10000 <dbl> 9.210340, 9.210340, 9.274303, 10.409…
$ log_pri_length_15000 <dbl> 9.630228, 9.615805, 9.658899, 11.173…
$ log_pri_length_25000 <dbl> 11.32735, 10.12663, 10.15769, 11.909…
$ log_prisec_length_500 <dbl> 7.295356, 6.214608, 8.611945, 7.3101…
$ log_prisec_length_1000 <dbl> 8.195119, 7.600902, 9.735569, 8.5858…
$ log_prisec_length_5000 <dbl> 10.815042, 10.170878, 11.770407, 10.…
$ log_prisec_length_10000 <dbl> 11.88680, 11.40554, 12.84066, 11.508…
$ log_prisec_length_15000 <dbl> 12.205723, 12.042963, 13.282656, 12.…
$ log_prisec_length_25000 <dbl> 13.41395, 12.79980, 13.79973, 13.559…
$ log_nei_2008_pm25_sum_10000 <dbl> 0.318035438, 3.218632928, 6.57312730…
$ log_nei_2008_pm25_sum_15000 <dbl> 1.967358961, 3.218632928, 6.58191745…
$ log_nei_2008_pm25_sum_25000 <dbl> 5.067308, 3.218633, 6.875900, 4.8876…
$ log_nei_2008_pm10_sum_10000 <dbl> 1.35588511, 3.31111648, 6.69187313, …
$ log_nei_2008_pm10_sum_15000 <dbl> 2.26783411, 3.31111648, 6.70127741, …
$ log_nei_2008_pm10_sum_25000 <dbl> 5.628728, 3.311116, 7.148858, 5.1719…
$ popdens_county <dbl> 44.265706, 8.906492, 35.460814, 35.3…
$ popdens_zcta <dbl> 145.716431, 13.639555, 540.887040, 4…
$ nohs <dbl> 3.3, 11.6, 7.3, 14.3, 4.3, 5.8, 7.1,…
$ somehs <dbl> 4.9, 19.1, 15.8, 16.7, 13.3, 11.6, 1…
$ hs <dbl> 25.1, 33.9, 30.6, 35.0, 27.8, 29.8, …
$ somecollege <dbl> 19.7, 18.8, 20.9, 14.9, 29.2, 21.4, …
$ associate <dbl> 8.2, 8.0, 7.6, 5.5, 10.1, 7.9, 7.3, …
$ bachelor <dbl> 25.3, 5.5, 12.7, 7.9, 10.0, 13.7, 5.…
$ grad <dbl> 13.5, 3.1, 5.1, 5.8, 5.4, 9.8, 2.0, …
$ pov <dbl> 6.1, 19.5, 19.0, 13.8, 8.8, 15.6, 25…
$ hs_orless <dbl> 33.3, 64.6, 53.7, 66.0, 45.4, 47.2, …
$ urc2013 <dbl> 4, 6, 4, 6, 4, 4, 1, 1, 1, 1, 1, 1, …
$ urc2006 <dbl> 5, 6, 4, 5, 4, 4, 1, 1, 1, 1, 1, 1, …
$ aod <dbl> 37.36364, 34.81818, 36.00000, 33.083…
Great! Now we can see that these variables are now factors as indicated by <fct> after the variable name.
The skim() function of the skimr package is also really helpful for getting a general sense of your data.
Data summary
| Name |
pm |
| Number of rows |
876 |
| Number of columns |
50 |
| _______________________ |
|
| Column type frequency: |
|
| character |
3 |
| factor |
3 |
| numeric |
44 |
| ________________________ |
|
| Group variables |
None |
Variable type: character
| state |
0 |
1 |
4 |
20 |
0 |
49 |
0 |
| county |
0 |
1 |
3 |
20 |
0 |
471 |
0 |
| city |
0 |
1 |
4 |
48 |
0 |
607 |
0 |
Variable type: factor
| id |
0 |
1 |
FALSE |
876 |
100: 1, 102: 1, 103: 1, 104: 1 |
| fips |
0 |
1 |
FALSE |
569 |
170: 12, 603: 10, 261: 9, 107: 8 |
| zcta |
0 |
1 |
FALSE |
842 |
475: 3, 110: 2, 160: 2, 290: 2 |
Variable type: numeric
| value |
0 |
1 |
10.81 |
2.580000e+00 |
3.02 |
9.27 |
11.15 |
12.37 |
2.316000e+01 |
▂▆▇▁▁ |
| lat |
0 |
1 |
38.48 |
4.620000e+00 |
25.47 |
35.03 |
39.30 |
41.66 |
4.840000e+01 |
▁▃▅▇▂ |
| lon |
0 |
1 |
-91.74 |
1.496000e+01 |
-124.18 |
-99.16 |
-87.47 |
-80.69 |
-6.804000e+01 |
▃▂▃▇▃ |
| CMAQ |
0 |
1 |
8.41 |
2.970000e+00 |
1.63 |
6.53 |
8.62 |
10.24 |
2.313000e+01 |
▃▇▃▁▁ |
| zcta_area |
0 |
1 |
183173481.91 |
5.425989e+08 |
15459.00 |
14204601.75 |
37653560.50 |
160041508.25 |
8.164821e+09 |
▇▁▁▁▁ |
| zcta_pop |
0 |
1 |
24227.58 |
1.777216e+04 |
0.00 |
9797.00 |
22014.00 |
35004.75 |
9.539700e+04 |
▇▇▃▁▁ |
| imp_a500 |
0 |
1 |
24.72 |
1.934000e+01 |
0.00 |
3.70 |
25.12 |
40.22 |
6.961000e+01 |
▇▅▆▃▂ |
| imp_a1000 |
0 |
1 |
24.26 |
1.802000e+01 |
0.00 |
5.32 |
24.53 |
38.59 |
6.750000e+01 |
▇▅▆▃▁ |
| imp_a5000 |
0 |
1 |
19.93 |
1.472000e+01 |
0.05 |
6.79 |
19.07 |
30.11 |
7.460000e+01 |
▇▆▃▁▁ |
| imp_a10000 |
0 |
1 |
15.82 |
1.381000e+01 |
0.09 |
4.54 |
12.36 |
24.17 |
7.209000e+01 |
▇▃▂▁▁ |
| imp_a15000 |
0 |
1 |
13.43 |
1.312000e+01 |
0.11 |
3.24 |
9.67 |
20.55 |
7.110000e+01 |
▇▃▁▁▁ |
| county_area |
0 |
1 |
3768701992.12 |
6.212830e+09 |
33703512.00 |
1116536297.50 |
1690826566.50 |
2878192209.00 |
5.194723e+10 |
▇▁▁▁▁ |
| county_pop |
0 |
1 |
687298.44 |
1.293489e+06 |
783.00 |
100948.00 |
280730.50 |
743159.00 |
9.818605e+06 |
▇▁▁▁▁ |
| log_dist_to_prisec |
0 |
1 |
6.19 |
1.410000e+00 |
-1.46 |
5.43 |
6.36 |
7.15 |
1.045000e+01 |
▁▁▃▇▁ |
| log_pri_length_5000 |
0 |
1 |
9.82 |
1.080000e+00 |
8.52 |
8.52 |
10.05 |
10.73 |
1.205000e+01 |
▇▂▆▅▂ |
| log_pri_length_10000 |
0 |
1 |
10.92 |
1.130000e+00 |
9.21 |
9.80 |
11.17 |
11.83 |
1.302000e+01 |
▇▂▇▇▃ |
| log_pri_length_15000 |
0 |
1 |
11.50 |
1.150000e+00 |
9.62 |
10.87 |
11.72 |
12.40 |
1.359000e+01 |
▆▂▇▇▃ |
| log_pri_length_25000 |
0 |
1 |
12.24 |
1.100000e+00 |
10.13 |
11.69 |
12.46 |
13.05 |
1.436000e+01 |
▅▃▇▇▃ |
| log_prisec_length_500 |
0 |
1 |
6.99 |
9.500000e-01 |
6.21 |
6.21 |
6.21 |
7.82 |
9.400000e+00 |
▇▁▂▂▁ |
| log_prisec_length_1000 |
0 |
1 |
8.56 |
7.900000e-01 |
7.60 |
7.60 |
8.66 |
9.20 |
1.047000e+01 |
▇▅▆▃▁ |
| log_prisec_length_5000 |
0 |
1 |
11.28 |
7.800000e-01 |
8.52 |
10.91 |
11.42 |
11.83 |
1.278000e+01 |
▁▁▃▇▃ |
| log_prisec_length_10000 |
0 |
1 |
12.41 |
7.300000e-01 |
9.21 |
11.99 |
12.53 |
12.94 |
1.385000e+01 |
▁▁▃▇▅ |
| log_prisec_length_15000 |
0 |
1 |
13.03 |
7.200000e-01 |
9.62 |
12.59 |
13.13 |
13.57 |
1.441000e+01 |
▁▁▃▇▅ |
| log_prisec_length_25000 |
0 |
1 |
13.82 |
7.000000e-01 |
10.13 |
13.38 |
13.92 |
14.35 |
1.523000e+01 |
▁▁▃▇▆ |
| log_nei_2008_pm25_sum_10000 |
0 |
1 |
3.97 |
2.350000e+00 |
0.00 |
2.15 |
4.29 |
5.69 |
9.120000e+00 |
▆▅▇▆▂ |
| log_nei_2008_pm25_sum_15000 |
0 |
1 |
4.72 |
2.250000e+00 |
0.00 |
3.47 |
5.00 |
6.35 |
9.420000e+00 |
▃▃▇▇▂ |
| log_nei_2008_pm25_sum_25000 |
0 |
1 |
5.67 |
2.110000e+00 |
0.00 |
4.66 |
5.91 |
7.28 |
9.650000e+00 |
▂▂▇▇▃ |
| log_nei_2008_pm10_sum_10000 |
0 |
1 |
4.35 |
2.320000e+00 |
0.00 |
2.69 |
4.62 |
6.07 |
9.340000e+00 |
▅▅▇▇▂ |
| log_nei_2008_pm10_sum_15000 |
0 |
1 |
5.10 |
2.180000e+00 |
0.00 |
3.87 |
5.39 |
6.72 |
9.710000e+00 |
▂▃▇▇▂ |
| log_nei_2008_pm10_sum_25000 |
0 |
1 |
6.07 |
2.010000e+00 |
0.00 |
5.10 |
6.37 |
7.52 |
9.880000e+00 |
▁▂▆▇▃ |
| popdens_county |
0 |
1 |
551.76 |
1.711510e+03 |
0.26 |
40.77 |
156.67 |
510.81 |
2.682191e+04 |
▇▁▁▁▁ |
| popdens_zcta |
0 |
1 |
1279.66 |
2.757490e+03 |
0.00 |
101.15 |
610.35 |
1382.52 |
3.041884e+04 |
▇▁▁▁▁ |
| nohs |
0 |
1 |
6.99 |
7.210000e+00 |
0.00 |
2.70 |
5.10 |
8.80 |
1.000000e+02 |
▇▁▁▁▁ |
| somehs |
0 |
1 |
10.17 |
6.200000e+00 |
0.00 |
5.90 |
9.40 |
13.90 |
7.220000e+01 |
▇▂▁▁▁ |
| hs |
0 |
1 |
30.32 |
1.140000e+01 |
0.00 |
23.80 |
30.75 |
36.10 |
1.000000e+02 |
▂▇▂▁▁ |
| somecollege |
0 |
1 |
21.58 |
8.600000e+00 |
0.00 |
17.50 |
21.30 |
24.70 |
1.000000e+02 |
▆▇▁▁▁ |
| associate |
0 |
1 |
7.13 |
4.010000e+00 |
0.00 |
4.90 |
7.10 |
8.80 |
7.140000e+01 |
▇▁▁▁▁ |
| bachelor |
0 |
1 |
14.90 |
9.710000e+00 |
0.00 |
8.80 |
12.95 |
19.22 |
1.000000e+02 |
▇▂▁▁▁ |
| grad |
0 |
1 |
8.91 |
8.650000e+00 |
0.00 |
3.90 |
6.70 |
11.00 |
1.000000e+02 |
▇▁▁▁▁ |
| pov |
0 |
1 |
14.95 |
1.133000e+01 |
0.00 |
6.50 |
12.10 |
21.22 |
6.590000e+01 |
▇▅▂▁▁ |
| hs_orless |
0 |
1 |
47.48 |
1.675000e+01 |
0.00 |
37.92 |
48.65 |
59.10 |
1.000000e+02 |
▁▃▇▃▁ |
| urc2013 |
0 |
1 |
2.92 |
1.520000e+00 |
1.00 |
2.00 |
3.00 |
4.00 |
6.000000e+00 |
▇▅▃▂▁ |
| urc2006 |
0 |
1 |
2.97 |
1.520000e+00 |
1.00 |
2.00 |
3.00 |
4.00 |
6.000000e+00 |
▇▅▃▂▁ |
| aod |
0 |
1 |
43.70 |
1.956000e+01 |
5.00 |
31.66 |
40.17 |
49.67 |
1.430000e+02 |
▃▇▁▁▁ |
Notice how there is a column called n_missing about the number of values that are missing. It looks like our data is very complete and we do not have any missing data. This is also indicated by the complete_rate variable, which shows the ratio of completeness, in our case all variables have a value of 1 indicating they are fully complete.
The n_unqiue column shows us the number of unique values for each of our columns. We can see that there are 49 states represented in the data, and we know that the data should be of the contiguous states. Let’s take a look to see which states are included:
Looks like “District of Columbia” is being included as a state. We can see that indeed Alaska and Hawaii are not included in the data.
Here is another method of looking at the data using the dfSummary() function of the summarytoolspackage. We need to copy and paste the output into the rmarkdown.
Dimensions: 876 x 50
Duplicates: 0
| 1 |
id
[factor] |
1. 1003.001
2. 1027.0001
3. 1033.1002
4. 1049.1003
5. 1055.001
6. 1069.0003
7. 1073.0023
8. 1073.1005
9. 1073.1009
10. 1073.101
[ 866 others ] |
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
866 (98.9%) |
 |
876
(100%) |
0
(0%) |
| 2 |
value
[numeric] |
Mean (sd) : 10.8 (2.6)
min < med < max:
3 < 11.2 < 23.2
IQR (CV) : 3.1 (0.2) |
875 distinct values |
 |
876
(100%) |
0
(0%) |
| 3 |
fips
[factor] |
1. 1003
2. 1027
3. 1033
4. 1049
5. 1055
6. 1069
7. 1073
8. 1089
9. 1097
10. 1101
[ 559 others ] |
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
8 ( 0.9%)
1 ( 0.1%)
2 ( 0.2%)
1 ( 0.1%)
858 (98.0%) |
 |
876
(100%) |
0
(0%) |
| 4 |
lat
[numeric] |
Mean (sd) : 38.5 (4.6)
min < med < max:
25.5 < 39.3 < 48.4
IQR (CV) : 6.6 (0.1) |
876 distinct values |
 |
876
(100%) |
0
(0%) |
| 5 |
lon
[numeric] |
Mean (sd) : -91.7 (15)
min < med < max:
-124.2 < -87.5 < -68
IQR (CV) : 18.5 (-0.2) |
876 distinct values |
 |
876
(100%) |
0
(0%) |
| 6 |
state
[character] |
1. California
2. Ohio
3. Illinois
4. Indiana
5. North Carolina
6. Pennsylvania
7. Michigan
8. Florida
9. Georgia
10. Texas
[ 39 others ] |
85 ( 9.7%)
44 ( 5.0%)
38 ( 4.3%)
36 ( 4.1%)
35 ( 4.0%)
32 ( 3.7%)
30 ( 3.4%)
29 ( 3.3%)
28 ( 3.2%)
27 ( 3.1%)
492 (56.2%) |
 |
876
(100%) |
0
(0%) |
| 7 |
county
[character] |
1. Jefferson
2. Cook
3. Hamilton
4. Lake
5. Los Angeles
6. Wayne
7. Washington
8. Cuyahoga
9. Jackson
10. Madison
[ 461 others ] |
18 ( 2.1%)
12 ( 1.4%)
11 ( 1.3%)
11 ( 1.3%)
10 ( 1.1%)
10 ( 1.1%)
9 ( 1.0%)
7 ( 0.8%)
7 ( 0.8%)
7 ( 0.8%)
774 (88.4%) |
 |
876
(100%) |
0
(0%) |
| 8 |
city
[character] |
1. Not in a city
2. New York
3. Cleveland
4. Baltimore
5. Chicago
6. Detroit
7. Milwaukee
8. New Haven
9. Philadelphia
10. Springfield
[ 597 others ] |
103 (11.8%)
9 ( 1.0%)
6 ( 0.7%)
5 ( 0.6%)
5 ( 0.6%)
5 ( 0.6%)
5 ( 0.6%)
5 ( 0.6%)
5 ( 0.6%)
5 ( 0.6%)
723 (82.5%) |
 |
876
(100%) |
0
(0%) |
| 9 |
CMAQ | Me [numeric] |
an (sd) : 8.4 (3) | 60 min < med < max:
1.6 < 8.6 < 23.1
IQR (CV) : 3.7 (0.4) |
1 distinct values |  | 87 |
6 | 0
(100%) |
(0%) |
| 10 |
zcta
[factor] |
1. 1022
2. 1103
3. 1201
4. 1608
5. 1832
6. 1840
7. 1863
8. 1904
9. 2113
10. 2119
[ 832 others ] |
1 ( 0.1%)
2 ( 0.2%)
1 ( 0.1%)
2 ( 0.2%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
864 (98.6%) |
 |
876
(100%) |
0
(0%) |
| 11 |
zcta_area
[numeric] |
Mean (sd) : 183173481.9 (542598878.5)
min < med < max:
15459 < 37653560.5 < 8164820625
IQR (CV) : 145836906.5 (3) |
842 distinct values |
 |
876
(100%) |
0
(0%) |
| 12 |
zcta_pop
[numeric] |
Mean (sd) : 24227.6 (17772.2)
min < med < max:
0 < 22014 < 95397
IQR (CV) : 25207.8 (0.7) |
837 distinct values |
 |
876
(100%) |
0
(0%) |
| 13 |
imp_a500
[numeric] |
Mean (sd) : 24.7 (19.3)
min < med < max:
0 < 25.1 < 69.6
IQR (CV) : 36.5 (0.8) |
816 distinct values |
 |
876
(100%) |
0
(0%) |
| 14 |
imp_a1000
[numeric] |
Mean (sd) : 24.3 (18)
min < med < max:
0 < 24.5 < 67.5
IQR (CV) : 33.3 (0.7) |
860 distinct values |
 |
876
(100%) |
0
(0%) |
| 15 |
imp_a5000
[numeric] |
Mean (sd) : 19.9 (14.7)
min < med < max:
0.1 < 19.1 < 74.6
IQR (CV) : 23.3 (0.7) |
870 distinct values |
 |
876
(100%) |
0
(0%) |
| 16 |
imp_a10000
[numeric] |
Mean (sd) : 15.8 (13.8)
min < med < max:
0.1 < 12.4 < 72.1
IQR (CV) : 19.6 (0.9) |
870 distinct values |
 |
876
(100%) |
0
(0%) |
| 17 |
imp_a15000
[numeric] |
Mean (sd) : 13.4 (13.1)
min < med < max:
0.1 < 9.7 < 71.1
IQR (CV) : 17.3 (1) |
870 distinct values |
 |
876
(100%) |
0
(0%) |
| 18 |
county_area
[numeric] |
Mean (sd) : 3768701992.1 (6212829553.6)
min < med < max:
33703512 < 1690826566.5 < 51947229509
IQR (CV) : 1761655911.5 (1.6) |
564 distinct values |
 |
876
(100%) |
0
(0%) |
| 19 |
county_pop
[numeric] |
Mean (sd) : 687298.4 (1293488.7)
min < med < max:
783 < 280730.5 < 9818605
IQR (CV) : 642211 (1.9) |
564 distinct values |
 |
876
(100%) |
0
(0%) |
| 20 |
log_dist_to_prisec
[numeric] |
Mean (sd) : 6.2 (1.4)
min < med < max:
-1.5 < 6.4 < 10.5
IQR (CV) : 1.7 (0.2) |
870 distinct values |
 |
876
(100%) |
0
(0%) |
| 21 |
log_pri_length_5000
[numeric] |
Mean (sd) : 9.8 (1.1)
min < med < max:
8.5 < 10.1 < 12
IQR (CV) : 2.2 (0.1) |
586 distinct values |
 |
876
(100%) |
0
(0%) |
| 22 |
log_pri_length_10000
[numeric] |
Mean (sd) : 10.9 (1.1)
min < med < max:
9.2 < 11.2 < 13
IQR (CV) : 2 (0.1) |
687 distinct values |
 |
876
(100%) |
0
(0%) |
| 23 |
log_pri_length_15000
[numeric] |
Mean (sd) : 11.5 (1.1)
min < med < max:
9.6 < 11.7 < 13.6
IQR (CV) : 1.5 (0.1) |
726 distinct values |
 |
876
(100%) |
0
(0%) |
| 24 |
log_pri_length_25000
[numeric] |
Mean (sd) : 12.2 (1.1)
min < med < max:
10.1 < 12.5 < 14.4
IQR (CV) : 1.4 (0.1) |
787 distinct values |
 |
876
(100%) |
0
(0%) |
| 25 |
log_prisec_length_500
[numeric] |
Mean (sd) : 7 (1)
min < med < max:
6.2 < 6.2 < 9.4
IQR (CV) : 1.6 (0.1) |
382 distinct values |
 |
876
(100%) |
0
(0%) |
| 26 |
log_prisec_length_1000
[numeric] |
Mean (sd) : 8.6 (0.8)
min < med < max:
7.6 < 8.7 < 10.5
IQR (CV) : 1.6 (0.1) |
591 distinct values |
 |
876
(100%) |
0
(0%) |
| 27 |
log_prisec_length_5000
[numeric] |
Mean (sd) : 11.3 (0.8)
min < med < max:
8.5 < 11.4 < 12.8
IQR (CV) : 0.9 (0.1) |
852 distinct values |
 |
876
(100%) |
0
(0%) |
| 28 |
log_prisec_length_10000
[numeric] |
Mean (sd) : 12.4 (0.7)
min < med < max:
9.2 < 12.5 < 13.8
IQR (CV) : 1 (0.1) |
867 distinct values |
 |
876
(100%) |
0
(0%) |
| 29 |
log_prisec_length_15000
[numeric] |
Mean (sd) : 13 (0.7)
min < med < max:
9.6 < 13.1 < 14.4
IQR (CV) : 1 (0.1) |
869 distinct values |
 |
876
(100%) |
0
(0%) |
| 30 |
log_prisec_length_25000
[numeric] |
Mean (sd) : 13.8 (0.7)
min < med < max:
10.1 < 13.9 < 15.2
IQR (CV) : 1 (0.1) |
870 distinct values |
 |
876
(100%) |
0
(0%) |
| 31 |
log_nei_2008_pm25_sum_10000
[numeric] |
Mean (sd) : 4 (2.4)
min < med < max:
0 < 4.3 < 9.1
IQR (CV) : 3.5 (0.6) |
828 distinct values |
 |
876
(100%) |
0
(0%) |
| 32 |
log_nei_2008_pm25_sum_15000
[numeric] |
Mean (sd) : 4.7 (2.2)
min < med < max:
0 < 5 < 9.4
IQR (CV) : 2.9 (0.5) |
855 distinct values |
 |
876
(100%) |
0
(0%) |
| 33 |
log_nei_2008_pm25_sum_25000
[numeric] |
Mean (sd) : 5.7 (2.1)
min < med < max:
0 < 5.9 < 9.7
IQR (CV) : 2.6 (0.4) |
860 distinct values |
 |
876
(100%) |
0
(0%) |
| 34 |
log_nei_2008_pm10_sum_10000
[numeric] |
Mean (sd) : 4.3 (2.3)
min < med < max:
0 < 4.6 < 9.3
IQR (CV) : 3.4 (0.5) |
829 distinct values |
 |
876
(100%) |
0
(0%) |
| 35 |
log_nei_2008_pm10_sum_15000
[numeric] |
Mean (sd) : 5.1 (2.2)
min < med < max:
0 < 5.4 < 9.7
IQR (CV) : 2.8 (0.4) |
855 distinct values |
 |
876
(100%) |
0
(0%) |
| 36 |
log_nei_2008_pm10_sum_25000
[numeric] |
Mean (sd) : 6.1 (2)
min < med < max:
0 < 6.4 < 9.9
IQR (CV) : 2.4 (0.3) |
860 distinct values |
 |
876
(100%) |
0
(0%) |
| 37 |
popdens_county
[numeric] |
Mean (sd) : 551.8 (1711.5)
min < med < max:
0.3 < 156.7 < 26821.9
IQR (CV) : 470 (3.1) |
564 distinct values |
 |
876
(100%) |
0
(0%) |
| 38 |
popdens_zcta
[numeric] |
Mean (sd) : 1279.7 (2757.5)
min < med < max:
0 < 610.3 < 30418.8
IQR (CV) : 1281.4 (2.2) |
840 distinct values |
 |
876
(100%) |
0
(0%) |
| 39 |
nohs
[numeric] |
Mean (sd) : 7 (7.2)
min < med < max:
0 < 5.1 < 100
IQR (CV) : 6.1 (1) |
215 distinct values |
 |
876
(100%) |
0
(0%) |
| 40 |
somehs
[numeric] |
Mean (sd) : 10.2 (6.2)
min < med < max:
0 < 9.4 < 72.2
IQR (CV) : 8 (0.6) |
230 distinct values |
 |
876
(100%) |
0
(0%) |
| 41 |
hs
[numeric] |
Mean (sd) : 30.3 (11.4)
min < med < max:
0 < 30.8 < 100
IQR (CV) : 12.3 (0.4) |
347 distinct values |
 |
876
(100%) |
0
(0%) |
| 42 |
somecollege
[numeric] |
Mean (sd) : 21.6 (8.6)
min < med < max:
0 < 21.3 < 100
IQR (CV) : 7.2 (0.4) |
240 distinct values |
 |
876
(100%) |
0
(0%) |
| 43 |
associate
[numeric] |
Mean (sd) : 7.1 (4)
min < med < max:
0 < 7.1 < 71.4
IQR (CV) : 3.9 (0.6) |
157 distinct values |
 |
876
(100%) |
0
(0%) |
| 44 |
bachelor
[numeric] |
Mean (sd) : 14.9 (9.7)
min < med < max:
0 < 12.9 < 100
IQR (CV) : 10.4 (0.7) |
301 distinct values |
 |
876
(100%) |
0
(0%) |
| 45 |
grad
[numeric] |
Mean (sd) : 8.9 (8.6)
min < med < max:
0 < 6.7 < 100
IQR (CV) : 7.1 (1) |
245 distinct values |
 |
876
(100%) |
0
(0%) |
| 46 |
pov
[numeric] |
Mean (sd) : 15 (11.3)
min < med < max:
0 < 12.1 < 65.9
IQR (CV) : 14.7 (0.8) |
345 distinct values |
 |
876
(100%) |
0
(0%) |
| 47 |
hs_orless
[numeric] |
Mean (sd) : 47.5 (16.8)
min < med < max:
0 < 48.7 < 100
IQR (CV) : 21.2 (0.4) |
464 distinct values |
 |
876
(100%) |
0
(0%) |
| 48 |
urc2013
[numeric] |
Mean (sd) : 2.9 (1.5)
min < med < max:
1 < 3 < 6
IQR (CV) : 2 (0.5) |
1 : 203 (23.2%)
2 : 163 (18.6%)
3 : 228 (26.0%)
4 : 123 (14.0%)
5 : 101 (11.5%)
6 : 58 ( 6.6%) |
 |
876
(100%) |
0
(0%) |
| 49 |
urc2006
[numeric] |
Mean (sd) : 3 (1.5)
min < med < max:
1 < 3 < 6
IQR (CV) : 2 (0.5) |
1 : 195 (22.3%)
2 : 162 (18.5%)
3 : 221 (25.2%)
4 : 127 (14.5%)
5 : 115 (13.1%)
6 : 56 ( 6.4%) |
 |
876
(100%) |
0
(0%) |
| 50 |
aod
[numeric] |
Mean (sd) : 43.7 (19.6)
min < med < max:
5 < 40.2 < 143
IQR (CV) : 18 (0.4) |
581 distinct values |
 |
876
(100%) |
0
(0%) |
We can see that for many variables there are many low values as the distribution shows two peaks, one near zero and another with a higher value. This is true for the imp variables (measures of development), the nei variables (measures of emission sources) and the road density variables. We can also see that the range of some of the variables is very large, in particular the area and population related variables.
In prediction analyses, it is also useful to evaluate if any of the variables are correlated.
Intuitively we can expect some of our variables to be correlated.
We expect the development variables (imp) to be correlated with each other, we expect the road density variables to be correlated with each other, we expect the emission variables to be correlated with each other, and we also expect these variables to be correlated with one another and likely correlated with population density. We can get a nice visualization of correlation using the ggcorr() function and the ggpairs() function of the GGally package. to select our variables of interest we can use the select() function with the contains() function of the tidyr package.
First let’s look at the imp/development variables.


Indeed, we can see that imp_a1000 and imp_a500 are perfectly correlated, as well as imp_a10000, imp_a15000.
Now let’s take a look at the road density data:


We can see that while some of the road density variables are highly correlated with one another (or anti-correlated), there arr some variables that are less correlated with one another.
Finally let’s look at the emission variables.


We would also expect the population density data might correlate with some of these variables. Let’s take a look.


Interesting, so these variables don’t appear to be highly correlated, therefore we might need variables from each of the categories to predict our monitor PM2.5 pollution values.
We seem to have some pretty extreme population values though, so let’s see what happens when we take the log value.


Indeed this increased the correlation, but variables from each of these categories may still prove to be useful for prediction.
Now that we have a sense of what our data is like we can get started.
LS0tCnRpdGxlOiAiT3BlbiBDYXNlIFN0dWRpZXMgOiBQcmVkaWN0aW5nIEFubnVhbCBBaXIgUG9sbHV0aW9uICIKY3NzOiBzdHlsZS5jc3MKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBzZWxmX2NvbnRhaW5lZDogeWVzCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIG51bWJlcl9zZWN0aW9uczogbm8KICAgIHRoZW1lOiBjb3NtbwogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICB3b3JkX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKCi0tLQo8c3R5bGU+CiNUT0MgewogIGJhY2tncm91bmQ6IHVybCgiaHR0cHM6Ly9vcGVuY2FzZXN0dWRpZXMuZ2l0aHViLmlvL2ltZy9sb2dvLmpwZyIpOwogIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjsKICBwYWRkaW5nLXRvcDogMjQwcHggIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Owp9Cjwvc3R5bGU+CgoKCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGluY2x1ZGUgPSBUUlVFLCBjb21tZW50ID0gTkEsIGVjaG8gPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIGNhY2hlID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICBmaWcuYWxpZ24gPSAiY2VudGVyIiwgb3V0LndpZHRoID0gJzkwJScpCmxpYnJhcnkoaGVyZSkKbGlicmFyeShrbml0cikKYGBgCgoKIyMjIyB7Lm91dGxpbmUgfQpgYGB7ciwgZWNobyA9IEZBTFNFLCBvdXQud2lkdGggPSAiODAwIHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwgIm1haW5wbG90LnBuZyIpKQpgYGAKCiMjIyMKCiMjIHsuZGlzY2xhaW1lcl9ibG9ja30KCioqRGlzY2xhaW1lcioqOiBUaGUgcHVycG9zZSBvZiB0aGUgW09wZW4gQ2FzZSBTdHVkaWVzXShodHRwczovL29wZW5jYXNlc3R1ZGllcy5naXRodWIuaW8pe3RhcmdldD0iX2JsYW5rIn0gcHJvamVjdCBpcyAqKnRvIGRlbW9uc3RyYXRlIHRoZSB1c2Ugb2YgdmFyaW91cyBkYXRhIHNjaWVuY2UgbWV0aG9kcywgdG9vbHMsIGFuZCBzb2Z0d2FyZSBpbiB0aGUgY29udGV4dCBvZiBtZXNzeSwgcmVhbC13b3JsZCBkYXRhKiouIEEgZ2l2ZW4gY2FzZSBzdHVkeSBkb2VzIG5vdCBjb3ZlciBhbGwgYXNwZWN0cyBvZiB0aGUgcmVzZWFyY2ggcHJvY2VzcywgaXMgbm90IGNsYWltaW5nIHRvIGJlIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHdheSB0byBhbmFseXplIGEgZ2l2ZW4gZGF0YSBzZXQsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgbWFraW5nIHBvbGljeSBkZWNpc2lvbnMgd2l0aG91dCBleHRlcm5hbCBjb25zdWx0YXRpb24gZnJvbSBzY2llbnRpZmljIGV4cGVydHMuIAoKIyMgTW90aXZhdGlvbgpBIHZhcmlldHkgb2YgZGlmZmVyZW50IHNvdXJjZXMgY29udHJpYnV0ZSBkaWZmZXJlbnQgdHlwZXMgb2YgcG9sbHV0YW50cyB0byB3aGF0IHdlIGNhbGwgYWlyIHBvbGx1dGlvbi4gClNvbWUgc291cmNlcyBhcmUgbmF0dXJhbCB3aGlsZSBvdGhlcnMgYXJlIGFudGhyb3BvZ2VuaWMgKGh1bWFuIGRlcml2ZWQpOgoKPHAgYWxpZ249ImNlbnRlciI+CiAgPGltZyB3aWR0aD0iNjAwIiBzcmM9Imh0dHBzOi8vd3d3Lm5wcy5nb3Yvc3ViamVjdHMvYWlyL2ltYWdlcy9Tb3VyY2VzX0dyYXBoaWNfSHVnZS5qcGc/bWF4d2lkdGg9MTIwMCZtYXhoZWlnaHQ9MTIwMCZhdXRvcm90YXRlPWZhbHNlIj4KPC9wPgoKIyMjIyMgW1tzb3VyY2VdKGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3NhPWkmdXJsPWh0dHBzJTNBJTJGJTJGd3d3Lm5wcy5nb3YlMkZzdWJqZWN0cyUyRmFpciUyRnNvdXJjZXMuaHRtJnBzaWc9QU92VmF3MnY3QVZ4U0Y4WlNBUEVoTnVkVnRiTiZ1c3Q9MTU4NTc3MDk2NjIxNzAwMCZzb3VyY2U9aW1hZ2VzJmNkPXZmZSZ2ZWQ9MENBSVFqUnhxRndvVENQRE42NnFfeGVnQ0ZRQUFBQUFkQUFBQUFCQUQpXQoKIyMjIyBNYWpvciB0eXBlcyBvZiBhaXIgcG9sbHV0YW50cwoKMSkgKipHYXNlb3VzKiogLSBDYXJib24gTW9ub3hpZGUgKENPKSwgT3pvbmUgKE9+M34pLCBOaXRyb2dlbiBPeGlkZXMoTk8sIE5PfjJ+KSwgU3VscGhlciBEaW94aWRlIChTT34yfikKMikgKipQYXJ0aWN1bGF0ZSoqIC0gc21hbGwgbGlxdWlkcyBhbmQgc29saWRzIHN1c3BlbmRlZCBpbiB0aGUgYWlyIChpbmNsdWRlcyBsZWFkLSBjYW4gaW5jbHVkZSBjZXJ0YWluIHR5cGVzIG9mIGR1c3QpCjMpICoqRHVzdCoqIC0gc21hbGwgc29saWRzIChsYXJnZXIgdGhhbiBwYXJ0aWN1bGF0ZXMpIHRoYXQgY2FuIGJlIHN1c3BlbmRlZCBpbiB0aGUgYWlyIGZvciBzb21lIHRpbWUgYnV0IGV2ZW50dWFsbHkgc2V0dGxlCjQpICoqQmlvbG9naWNhbCoqIC0gcG9sbGVuLCBiYWN0ZXJpYSwgdmlydXNlcywgbW9sZCBzcG9yZXMKClNlZSBbaGVyZV0paHR0cDovL3d3dy5yZWRsb2dlbnYuY29tL3dvcmtlci1zYWZldHkvcGFydC0xLWR1c3QtYW5kLXBhcnRpY3VsYXRlLW1hdHRlcikgZm9yIG1vcmUgZGV0YWlsIG9uIHRoZSB0eXBlcyBvZiBwb2xsdXRhbnRzIGluIHRoZSBhaXIuCgoKIyMjIyBQYXJ0aWN1bGF0ZSBwb2xsdXRpb24gCgpBaXIgcG9sbHV0aW9uIHBhcnRpY3VsYXRlcyBhcmUgZ2VuZXJhbGx5IGRlc2NyaWJlZCBieSB0aGVpciAqKnNpemUqKi4KClRoZXJlIGFyZSAzIG1ham9yIGNhdGVnb3JpZXM6CgoxKSAqKkxhcmdlIENvYXJzZSoqIFBhcnRpY3VsYXRlIE1hdGVyIC0gaGFzIGRpYW1ldGVyIG9mID4xMCBtaWNyb21ldGVycyAoMTAgwrVtKSAKCjIpICoqQ29hcnNlKiogUGFydGljdWxhdGUgTWF0ZXIgKGNhbGxlZCAqKlBNfjEwLTIuNX4qKikgLSBoYXMgZGlhbWV0ZXIgb2YgYmV0d2VlbiAyLjUgwrVtIGFuZCAxMCDCtW0KCjMpICoqRmluZSoqIFBhcnRpY3VsYXRlIE1hdGVyIChjYWxsZWQgKipQTX4yLjV+KiopIC0gaGFzIGRpYW1ldGVyIG9mIDwgMi41IMK1bSAKCioqUE1+MTB+KiogaW5jbHVkZXMgYW55IHBhcnRpY3VsYXRlIG1hdGVyIDwxMCDCtW0gKGJvdGggY29hcnNlIGFuZCBmaW5lIHBhcnRpY3VsYXRlIG1hdGVyKQoKSGVyZSB5b3UgY2FuIHNlZSBob3cgdGhlc2Ugc2l6ZXMgY29tcGFyZSB3aXRoIGEgaHVtYW4gaGFpcjoKCmBgYHtyLCBlY2hvID0gRkFMU0UsIG91dC53aWR0aD0gIjYwMCBweCJ9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoImltZyIsICJwbTIuNV9zY2FsZV9ncmFwaGljLWNvbG9yXzIuanBnIikpCmBgYAoKIyMjIyMgW1tzb3VyY2VdKGh0dHBzOi8vd3d3LmVwYS5nb3YvcG0tcG9sbHV0aW9uL3BhcnRpY3VsYXRlLW1hdHRlci1wbS1iYXNpY3MpXQoKPCEtLSA8cCBhbGlnbj0iY2VudGVyIj4gLS0+CjwhLS0gICA8aW1nIHdpZHRoPSI1MDAiIHNyYz0iaHR0cHM6Ly93d3cuc2Vuc2lyaW9uLmNvbS9pbWFnZXMvc2Vuc2lyaW9uLXNwZWNpYWxpc3QtYXJ0aWNsZS1maWd1cmUtMS1jZGQ3MC5qcGciPiAtLT4KPCEtLSA8L3A+IC0tPgoKCjx1PlRoZSBmb2xsb3dpbmcgcGxvdCBhbmQgdGFibGUgc2hvdyB0aGUgcmVsYXRpdmUgc2l6ZXMgb2YgdGhlc2UgZGlmZmVyZW50IHBvbGx1dGFudHMgaW4gbWljcm9tZXRlcnMowrVtKTo8L3U+Cgo8cCBhbGlnbj0iY2VudGVyIj4KICA8aW1nIHdpZHRoPSI2MDAiIHNyYz0iaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi9kL2RmL0FpcmJvcm5lLXBhcnRpY3VsYXRlLXNpemUtY2hhcnQuc3ZnLzgwMHB4LUFpcmJvcm5lLXBhcnRpY3VsYXRlLXNpemUtY2hhcnQuc3ZnLnBuZyI+CjwvcD4KCiMjIyMjIFtbc291cmNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QYXJ0aWN1bGF0ZXMpXQoKCjxwIGFsaWduPSJjZW50ZXIiPgogIDxpbWcgd2lkdGg9IjUwMCIgc3JjPSJodHRwczovL3d3dy5mcm9udGllcnNpbi5vcmcvZmlsZXMvQXJ0aWNsZXMvNTA1NTcwL2ZwdWJoLTA4LTAwMDE0LUhUTUwvaW1hZ2VfbS9mcHViaC0wOC0wMDAxNC10MDAyLmpwZyI+CjwvcD4KCiMjIyMjIFtbc291cmNlXShodHRwczovL3d3dy5mcm9udGllcnNpbi5vcmcvYXJ0aWNsZXMvMTAuMzM4OS9mcHViaC4yMDIwLjAwMDE0L2Z1bGwpXQoKCjx1PlRoaXMgdGFibGUgc2hvd3MgaG93IGRlZXBseSBzb21lIG9mIHRoZSBzbWFsbGVyIGZpbmUgcGFydGljbGVzIGNhbiBwZW5ldHJhdGUgd2l0aGluIHRoZSBodW1hbiBib2R5OjwvdT4KCjxwIGFsaWduPSJjZW50ZXIiPgogIDxpbWcgd2lkdGg9IjUwMCIgc3JjPSJodHRwczovL3d3dy5mcm9udGllcnNpbi5vcmcvZmlsZXMvQXJ0aWNsZXMvNTA1NTcwL2ZwdWJoLTA4LTAwMDE0LUhUTUwvaW1hZ2VfbS9mcHViaC0wOC0wMDAxNC10MDAxLmpwZyI+CjwvcD4KCiMjIyMjIFtbc291cmNlXShodHRwczovL3d3dy5mcm9udGllcnNpbi5vcmcvYXJ0aWNsZXMvMTAuMzM4OS9mcHViaC4yMDIwLjAwMDE0L2Z1bGwpXQoKCiMjIyMgTmVnYXRpdmUgSW1wYWN0IG9mIFBhcnRpY3VsYXRlIEV4cG9zdXJlIG9uIEhlYWx0aCAKCkV4cG9zdXJlIHRvIGFpciBwb2xsdXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIGhpZ2hlciByYXRlcyBvZiBbbW9ydGFsaXR5XShodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L3BtYy9hcnRpY2xlcy9QTUM1NzgzMTg2Lyl7dGFyZ2V0PSJfYmxhbmsifSBpbiBvbGRlciBhZHVsdHMgYW5kIGlzIGtub3duIHRvIGJlIGEgcmlzayBmYWN0b3IgZm9yIG1hbnkgZGlzZWFzZXMgYW5kIGNvbmRpdGlvbnMgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzoKCjEpIFtBc3RobWFdKGh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvcHVibWVkLzI5MjQzOTM3KXt0YXJnZXQ9Il9ibGFuayJ9IC0gZmluZSBwYXJ0aWNsZSBleHBvc3VyZSAoKipQTX4yLjV+KiopIHdhcyBmb3VuZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggaGlnaGVyIHJhdGVzIG9mIGFzdGhtYSBpbiBjaGlsZHJlbgoyKSBbSW5mbGFtbWF0aW9uIGluIHR5cGUgMSBkaWFiZXRlc10oaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wdWJtZWQvMzE0MTk3NjUpe3RhcmdldD0iX2JsYW5rIn0gLSBmaW5lIHBhcnRpY2xlIGV4cG9zdXJlICgqKlBNfjIuNX4qKikgZnJvbSB0cmFmZmljLXJlbGF0ZWQgYWlyIHBvbGx1dGlvbiB3YXMgYXNzb2NpYXRlZCB3aXRoIGluY3JlYXNlZCBtZWFzdXJlcyBvZiBpbmZsYW1tYXRvcnkgbWFya2VycyBpbiB5b3V0aHMgd2l0aCB0eXBlIDEgZGlhYmV0ZXMKMykgW0x1bmcgZnVuY3Rpb24gYW5kIGVtcGh5c2VtYV0oaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wdWJtZWQvMzE0MDgxMzUpe3RhcmdldD0iX2JsYW5rIn0gLSBoaWdoZXIgY29uY2VudHJhdGlvbnMgb2Ygb3pvbmUgKE9+M34pLCBuaXRyb2dlbiBveGlkZXMgKE5Pfnh+KSwgYmxhY2sgY2FyYm9uLCBhbmQgZmluZSBwYXJ0aWNsZSBleHBvc3VyZSAqKlBNfjIuNX4qKiAsIGF0IHN0dWR5IGJhc2VsaW5lIHdlcmUgc2lnbmlmaWNhbnRseSBhc3NvY2lhdGVkIHdpdGggZ3JlYXRlciBpbmNyZWFzZXMgaW4gcGVyY2VudCBlbXBoeXNlbWEgcGVyIDEwIHllYXJzIAo0KSBbTG93IGJpcnRod2VpZ2h0XShodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L3B1Ym1lZC8zMTM4NjY0Myl7dGFyZ2V0PSJfYmxhbmsifSAtIGZpbmUgcGFydGljbGUgZXhwb3N1cmUoKipQTX4yLjV+KiopIHdhcyBhc3NvY2lhdGVkIHdpdGggbG93ZXIgYmlydGggd2VpZ2h0IGluIGZ1bGwtdGVybSBsaXZlIGJpcnRocwo1KSBbVmlyYWwgSW5mZWN0aW9uXShodHRwczovL3d3dy50YW5kZm9ubGluZS5jb20vZG9pL2Z1bGwvMTAuMTA4MC8wODk1ODM3MDcwMTY2NTQzNCl7dGFyZ2V0PSJfYmxhbmsifSAtIGhpZ2hlciByYXRlcyBvZiBpbmZlY3Rpb24gYW5kIGluY3JlYXNlZCBzZXZlcml0eSBvZiBpbmZlY3Rpb24gYXJlIGFzc29jaWF0ZWQgd2l0aCBoaWdoZXIgZXhwb3N1cmVzIHRvIHBvbGx1dGlvbiBsZXZlbHMgaW5jbHVkaW5nIGZpbmUgcGFydGljbGUgZXhwb3N1cmUgKCoqUE1+Mi41fioqKQoKU2VlIHRoaXMgW3JldmlldyBhcnRpY2xlXShodHRwczovL3d3dy5mcm9udGllcnNpbi5vcmcvYXJ0aWNsZXMvMTAuMzM4OS9mcHViaC4yMDIwLjAwMDE0L2Z1bGwpe3RhcmdldD0iX2JsYW5rIn0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc291cmNlcyBvZiBhaXIgcG9sbHV0aW9uIGFuZCB0aGUgaW5mbHVlbmNlIG9mIGFpciBwb2xsdXRpb24gb24gaGVhbHRoLgoKIyMjIyBTcGFyc2UgTW9uaXRvcmluZyBpcyBQcm9ibGVtYXRpYyBmb3IgUHVibGljIEhlYWx0aAoKSGlzdG9yaWNhbGx5IGVwaWRlbWlvbG9naWNhbCBzdHVkaWVzIHdvdWxkIGFzc2VzcyB0aGUgaW5mbHVlbmNlIG9mIGFpciBwb2xsdXRpb24gb24gaGVhbHRoIG91dGNvbWVzIGJ5IHJlbHlpbmcgb24gYSBudW1iZXIgb2YgbW9uaXRvcnMgbG9jYXRlZCBhcm91bmQgdGhlIGNvdW50cnkuIEhvd2V2ZXIgYXMgY2FuIGJlIHNlZW4gaW4gdGhlIGZvbGxvd2luZyBmaWd1cmUsIHRoZXNlIG1vbml0b3JzIHJlbWFpbiB0byBiZSByZWxhdGl2ZWx5IHNwYXJzZSBpbiBjZXJ0YWluIHJlZ2lvbnMgb2YgdGhlIGNvdW50cnkuIEZ1cnRoZXJtb3JlLCBkcmFtYXRpYyBkaWZmZXJlbmNlcyBpbiBwb2xsdXRpb24gcmF0ZXMgY2FuIGJlIHNlZW4gZXZlbiB3aXRoaW4gdGhlIHNhbWUgY2l0eS4KCjxwIGFsaWduPSJjZW50ZXIiPgogIDxpbWcgd2lkdGg9IjQwMCIgc3JjPSJodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L3BtYy9hcnRpY2xlcy9QTUM0MTM3MjcyL2Jpbi8xNDc2LTA2OVgtMTMtNjMtMS5qcGciPgo8L3A+CgojIyMjIyBbW3NvdXJjZV0oaHR0cHM6Ly9laGpvdXJuYWwuYmlvbWVkY2VudHJhbC5jb20vYXJ0aWNsZXMvMTAuMTE4Ni8xNDc2LTA2OVgtMTMtNjMpXQoKVGhpcyBsYWNrIG9mIGdyYW51bGFyaXR5IGluIGFpciBwb2xsdXRpb24gbW9uaXRvcmluZyBoYXMgaGluZGVyZWQgb3VyIGFiaWxpdHkgdG8gZGlzY2VybiB0aGUgZnVsbCBpbXBhY3Qgb2YgYWlyIHBvbGx1dGlvbiBvbiBoZWFsdGggYW5kIHRvIGlkZW50aWZ5IGF0LXJpc2sgbG9jYXRpb25zLiAKCgojIyMjIE1hY2hpbmUgTGVhcm5pbmcgT2ZmZXJzIGEgU29sdXRpb24KCkFuIFthcnRpY2xlXShodHRwczovL2Voam91cm5hbC5iaW9tZWRjZW50cmFsLmNvbS9hcnRpY2xlcy8xMC4xMTg2LzE0NzYtMDY5WC0xMy02Myl7dGFyZ2V0PSJfYmxhbmsifSBwdWJsaXNoZWQgaW4gdGhlICpFbnZpcm9ubWVudGFsIEhlYWx0aCogam91cm5hbCBkZWFsdCB3aXRoIHRoaXMgaXNzdWUgYnkgdXNpbmcgZGF0YSBhYm91dCBwb3B1bGF0aW9uIGRlbnNpdHksIHJvYWQgZGVuc2l0eSwgYW1vbmcgb3RoZXIgZmVhdHVyZXMgdG8gbW9kZWwgb3IgcHJlZGljdCBhaXIgcG9sbHV0aW9uIGxldmVscyBhdCBhIG1vcmUgbG9jYWxpemVkIHNjYWxlIHVzaW5nIG1hY2hpbmUgbGVhcm5pbmcgbWV0aG9kcy4gCgpgYGB7ciwgZWNobyA9IEZBTFNFLCBvdXQud2lkdGg9ICI4MDAgcHgifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJpbWciLCAidGhlcGFwZXIucG5nIikpCmBgYAoKIyMjIyB7LnJlZmVyZW5jZV9ibG9ja30KWWFub3NreSwgSi4gRC4gZXQgYWwuIFNwYXRpby10ZW1wb3JhbCBtb2RlbGluZyBvZiBwYXJ0aWN1bGF0ZSBhaXIgcG9sbHV0aW9uIGluIHRoZSBjb250ZXJtaW5vdXMgVW5pdGVkIFN0YXRlcyB1c2luZyBnZW9ncmFwaGljIGFuZCBtZXRlb3JvbG9naWNhbCBwcmVkaWN0b3JzLiAqRW52aXJvbiBIZWFsdGgqIDEzLCA2MyAoMjAxNCkuCgojIyMjCgpUaGUgYXV0aG9ycyBvZiB0aGlzIGFydGljbGUgc3RhdGUgdGhhdDoKCj4gIkV4cG9zdXJlIHRvIGF0bW9zcGhlcmljIHBhcnRpY3VsYXRlIG1hdHRlciAoUE0pIHJlbWFpbnMgYW4gaW1wb3J0YW50IHB1YmxpYyBoZWFsdGggY29uY2VybiwKYWx0aG91Z2ggaXQgcmVtYWlucyBkaWZmaWN1bHQgdG8gcXVhbnRpZnkgYWNjdXJhdGVseSBhY3Jvc3MgbGFyZ2UgZ2VvZ3JhcGhpYyBhcmVhcyB3aXRoIHN1ZmZpY2llbnRseSBoaWdoIHNwYXRpYWwKcmVzb2x1dGlvbi4gUmVjZW50IGVwaWRlbWlvbG9naWMgYW5hbHlzZXMgaGF2ZSBkZW1vbnN0cmF0ZWQgdGhlIGltcG9ydGFuY2Ugb2Ygc3BhdGlhbGx5LSBhbmQgdGVtcG9yYWxseS1yZXNvbHZlZApleHBvc3VyZSBlc3RpbWF0ZXMsIHdoaWNoIHNob3cgbGFyZ2VyIFBNLW1lZGlhdGVkIGhlYWx0aCBlZmZlY3RzIGFzIGNvbXBhcmVkIHRvIG5lYXJlc3QgbW9uaXRvciBvcgpjb3VudHktc3BlY2lmaWMgYW1iaWVudCBjb25jZW50cmF0aW9ucy4iIAoKCmBgYHtyLCBlY2hvID0gRkFMU0UsIG91dC53aWR0aD0gIjcwMCBweCIsIGV2YWwgPSBGQUxTRX0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwgImRlYXRocy5wbmciKSkKYGBgCgpUaGUgYXJ0aWNsZSBhYm92ZSBleHBsYWlucyB0aGF0IG1hY2hpbmUgbGVhcm5pbmcgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBwcmVkaWN0IGFpciBwb2xsdXRpb24gbGV2ZWxzIHdoZW4gdHJhZGl0aW9uYWwgbW9uaXRvcmluZyBzeXN0ZW1zIGFyZSBub3QgYXZhaWxhYmxlIGluIGEgcGFydGljdWxhciBhcmVhIG9yIHdoZW4gdGhlcmUgaXMgbm90IGVub3VnaCBzcGF0aWFsIGdyYW51bGFyaXR5IHdpdGggY3VycmVudCBtb25pdG9yaW5nIHN5c3RlbXMuIFdlIHdpbGwgdXNlIHNpbWlsYXIgbWV0aG9kcyB0byBwcmVkaWN0IGFubnVhbCBhaXIgcG9sbHV0aW9uIGxldmVscyBzcGF0aWFsbHkgd2l0aGluIHRoZSBVUy4KCgojIyMgTWFpbiBRdWVzdGlvbnMKCiMjIyMgey5tYWluX3F1ZXN0aW9uX2Jsb2NrfQo8Yj48dT4gT3VyIG1haW4gcXVlc3Rpb246IDwvdT48L2I+CgoxKSBDYW4gd2UgcHJlZGljdCBhbm51YWwgYXZlcmFnZSBhaXIgcG9sbHV0aW9uIGNvbmNlbnRyYXRpb25zIGF0IHRoZSBncmFudWxhcml0eSBvZiB6aXAgY29kZSByZWdpb25hbCBsZXZlbHMgdXNpbmcgcHJlZGljdG9ycyBzdWNoIGFzIGRhdGEgYWJvdXQgcG9wdWxhdGlvbiBkZW5zaXR5LCB1cmJhbml6YXRpb24sIHJvYWQgZGVuc2l0eSwgYXMgd2VsbCBhcywgc2F0ZWxsaXRlIHBvbGx1dGlvbiBkYXRhIGFuZCBjaGVtaWNhbCBtb2RlbGluZyBkYXRhPwoKIyMjIwoKIyMjIExlYXJuaW5nIE9iamVjdGl2ZXMgCgpJbiB0aGlzIGNhc2Ugc3R1ZHksIHdlIHdpbGwgd2FsayB5b3UgdGhyb3VnaCBpbXBvcnRpbmcgZGF0YSBmcm9tIENTViBmaWxlcyBhbmQgcGVyZm9ybWluZyBtYWNoaW5lIGxlYXJuaW5nIG1ldGhvZHMgdG8gcHJlZGljdCBvdXIgb3V0Y29tZSB2YXJpYWJsZSBvZiBpbnRlcmVzdCAoaW4gdGhpcyBjYXNlIGFubnVhbCBmaW5lIHBhcnRpY2xlIGFpciBwb2xsdXRpb24gZXN0aW1hdGVzKS4gV2Ugd2lsbCBlc3BlY2lhbGx5IGZvY3VzIG9uIHVzaW5nIHBhY2thZ2VzIGFuZCBmdW5jdGlvbnMgZnJvbSB0aGUgW2BUaWR5dmVyc2VgXShodHRwczovL3d3dy50aWR5dmVyc2Uub3JnLyl7dGFyZ2V0PSJfYmxhbmsifSwgYW5kIG1vcmUgc3BlY2lmaWNhbGx5IHRoZSBbYHRpZHltb2RlbHNgXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvdGlkeW1vZGVscy90aWR5bW9kZWxzLnBkZil7dGFyZ2V0PSJfYmxhbmsifSBwYWNrYWdlL2Vjb3N5c3RlbSBwcmltYXJpbHkgZGV2ZWxvcGVkIGFuZCBtYWludGFpbmVkIGJ5IFtNYXggS3Vobl0oaHR0cHM6Ly9yZXNvdXJjZXMucnN0dWRpby5jb20vYXV0aG9ycy9tYXgta3Vobil7dGFyZ2V0PSJfYmxhbmsifSBhbmQgW0RhdmlzIFZhdWdoYW5dKGh0dHBzOi8vcmVzb3VyY2VzLnJzdHVkaW8uY29tL2F1dGhvcnMvZGF2aXMtdmF1Z2hhbil7dGFyZ2V0PSJfYmxhbmsifS4gVGhpcyBwYWNrYWdlIGxvYWRzIG1vcmUgbW9kZWxpbmcgcmVsYXRlZCBwYWNrYWdlcyBsaWtlIGByc2FtcGxlYCwgYHJlY2lwZXNgLCBgcGFyc25pcGAsIGB5YXJkc3RpY2tgLCAgYW5kIGBkaWFsc2AuIFdlIHdpbGwgYWxzbyBicmllZmx5IGNvdmVyIHRoZSBgd29ya2Zsb3dzYCBhbmQgYHR1bmVgIHBhY2thZ2VzLiBUaGUgdGlkeXZlcnNlIGlzIGEgbGlicmFyeSBvZiBwYWNrYWdlcyBjcmVhdGVkIGJ5IFJTdHVkaW8uIFdoaWxlIHNvbWUgc3R1ZGVudHMgbWF5IGJlIGZhbWlsaWFyIHdpdGggcHJldmlvdXMgUiBwcm9ncmFtbWluZyBwYWNrYWdlcywgdGhlc2UgcGFja2FnZXMgbWFrZSBkYXRhIHNjaWVuY2UgaW4gUiBlc3BlY2lhbGx5IGVmZmljaWVudC4KCgpgYGB7ciwgb3V0LndpZHRoID0gIjIwJSIsIGVjaG8gPSBGQUxTRSwgZmlnLmFsaWduID0iY2VudGVyIn0KaW5jbHVkZV9ncmFwaGljcygiaHR0cHM6Ly90aWR5dmVyc2UudGlkeXZlcnNlLm9yZy9sb2dvLnBuZyIpCmBgYAoKYGBge3IsIG91dC53aWR0aCA9ICIxMDBweCIsIGVjaG8gPSBGQUxTRSwgZmlnLmFsaWduID0iY2VudGVyIn0KaW5jbHVkZV9ncmFwaGljcygiaHR0cHM6Ly9wYnMudHdpbWcuY29tL21lZGlhL0RrQkZwU3NXNEFJeXlJTi5wbmciKQpgYGAKCgpXZSB3aWxsIGJlZ2luIGJ5IGxvYWRpbmcgdGhlIHBhY2thZ2VzIHRoYXQgd2Ugd2lsbCBuZWVkOgoKYGBge3J9CmxpYnJhcnkoaGVyZSkKbGlicmFyeShyZWFkcikKbGlicmFyeShkcGx5cikKbGlicmFyeShza2ltcikKbGlicmFyeShzdW1tYXJ5dG9vbHMpCmxpYnJhcnkobWFncml0dHIpCmxpYnJhcnkoR0dhbGx5KQoKbGlicmFyeSh0aWR5bW9kZWxzKSMgYnJvb20sIGRpYWxzLCBpbmZlciwgcGFyc25pcCwgcHVycnIsIHJlY2lwZXMsIHJzYW1wbGUsIHRpYmJsZSwgeWFyZHN0aWNrCmxpYnJhcnkod29ya2Zsb3dzKQpsaWJyYXJ5KHR1bmUpCgojIGxpYnJhcnkoc3RyaW5ncikKIyBsaWJyYXJ5KHB1cnJyKQojIGxpYnJhcnkodGliYmxlKQojIGxpYnJhcnkodGlkeXIpCiMgbGlicmFyeShnZ3Bsb3QyKQojIGxpYnJhcnkoZ2dwdWJyKQojIGxpYnJhcnkoZm9yY2F0cykKIyBsaWJyYXJ5KGxtZXJUZXN0KQojIGxpYnJhcnkoY2FyKQojIGxpYnJhcnkoZ2dpcmFwaCkKIyBsaWJyYXJ5KGdnZm9yY2UpCiMgbGlicmFyeSh2aXJpZGlzKQojIGxpYnJhcnkoY293cGxvdCkKYGBgCgoKIFBhY2thZ2UgICB8IFVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLSB8LS0tLS0tLS0tLS0tLQpbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2plbm55YmMvaGVyZV9oZXJlKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICAgIHwgdG8gZWFzaWx5IGxvYWQgYW5kIHNhdmUgZGF0YQpbcmVhZHJdKGh0dHBzOi8vcmVhZHIudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIGltcG9ydCB0aGUgQ1NWIGZpbGUgZGF0YQpbZHBseXJdKGh0dHBzOi8vZHBseXIudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIHZpZXcvYXJyYW5nZS9maWx0ZXIvc2VsZWN0L2NvbXBhcmUgc3BlY2lmaWMgc3Vic2V0cyBvZiB0aGUgZGF0YSAKW3NraW1yXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvc2tpbXIvaW5kZXguaHRtbCl7dGFyZ2V0PSJfYmxhbmsifSAgICAgIHwgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIGRhdGEKW3N1bW1hcnl0b29sc10oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL3NraW1yL2luZGV4Lmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIGdldCBhbiBvdmVydmlldyBvZiBkYXRhIGluIGEgZGlmZmVyZW50IHN0eWxlClttYWdyaXR0cl0oaHR0cHM6Ly9tYWdyaXR0ci50aWR5dmVyc2Uub3JnL2FydGljbGVzL21hZ3JpdHRyLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gICB8IHRvIHVzZSB0aGUgYCU8PiVgIHBpcHBpbmcgb3BlcmF0b3IgCltHR2FsbHldKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9HR2FsbHkvR0dhbGx5LnBkZil7dGFyZ2V0PSJfYmxhbmsifSB8IHRvIGNyZWF0ZSBjb3JyZWxhdGlvbiBwbG90cyAgCltyc2FtcGxlXShodHRwczovL3RpZHltb2RlbHMuZ2l0aHViLmlvL3JzYW1wbGUvYXJ0aWNsZXMvQmFzaWNzLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gICB8IHRvIHNwbGl0IHRoZSBkYXRhIGludG8gdGVzdGluZyBhbmQgdHJhaW5pbmcgc2V0cyBhbmQgdG8gc3BsaXQgdGhlIHRyYWluaW5nIHNldCBmb3IgY3Jvc3MtdmFsaWRhdGlvbiAgCltyZWNpcGVzXShodHRwczovL3RpZHltb2RlbHMuZ2l0aHViLmlvL3JlY2lwZXMvKXt0YXJnZXQ9Il9ibGFuayJ9ICAgfCB0byBwcmUtcHJvY2VzcyBkYXRhIGZvciBtb2RlbGluZyBpbiBhIHRpZHkgYW5kIHJlcHJvZHVjaWJsZSB3YXkgYW5kIHRvIGV4dHJhY3QgcHJlLXByb2Nlc3NlZCBkYXRhIChtYWpvciBmdW5jdGlvbnMgYXJlIGByZWNpcGUoKWAgLCBgcHJlcCgpYCBhbmQgdmFyaW91cyB0cmFuc2Zvcm1hdGlvbiBgc3RlcF8qKClgIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBganVpY2UoKWAgLSBleHRyYWN0cyBmaW5hbCBwcmVwcm9jZXNzZWQgdHJhaW5pbmcgZGF0YSBhbmQgYGJha2UoKWAgLSBhcHBsaWVzIHJlY2lwZSBzdGVwcyB0byB0ZXN0aW5nIGRhdGEpLiBTZWUgW2hlcmVdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9yZWNpcGVzL3JlY2lwZXMucGRmKXt0YXJnZXQ9Il9ibGFuayJ9ICBmb3IgbW9yZSBpbmZvLgpbcGFyc25pcF0oaHR0cHM6Ly90aWR5bW9kZWxzLmdpdGh1Yi5pby9wYXJzbmlwLyl7dGFyZ2V0PSJfYmxhbmsifSAgIHwgYW4gaW50ZXJmYWNlIHRvIGNyZWF0ZSBtb2RlbHMgKG1ham9yIGZ1bmN0aW9ucyBhcmUgIGBmaXQoKWAsIGBzZXRfZW5naW5lKClgKQpbeWFyZHN0aWNrXShodHRwczovL3RpZHltb2RlbHMuZ2l0aHViLmlvL3lhcmRzdGljay8pe3RhcmdldD0iX2JsYW5rIn0gICB8IHRvIGV2YWx1YXRlIHRoZSBwZXJmb3JtYW5jZSBvZiBtb2RlbHMKIAoKCltzdHJpbmdyXShodHRwczovL3N0cmluZ3IudGlkeXZlcnNlLm9yZy9hcnRpY2xlcy9zdHJpbmdyLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gICAgfCB0byBtYW5pcHVsYXRlIHRoZSB0ZXh0IHdpdGhpbiB0aGUgUERGIG9mIHRoZSBkYXRhCgpbcHVycnJdKGh0dHBzOi8vcHVycnIudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIHBlcmZvcm0gZnVuY3Rpb25zIG9uIGFsbCBjb2x1bW5zIG9mIGEgdGliYmxlClt0aWJibGVdKGh0dHBzOi8vdGliYmxlLnRpZHl2ZXJzZS5vcmcvKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICB8IHRvIGNyZWF0ZSBkYXRhIG9iamVjdHMgdGhhdCB3ZSBjYW4gbWFuaXB1bGF0ZSB3aXRoIGRwbHlyL3N0cmluZ3IvdGlkeXIvcHVycnIKW3RpZHlyXShodHRwczovL3RpZHlyLnRpZHl2ZXJzZS5vcmcvKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICAgfCB0byBzZXBhcmF0ZSBkYXRhIHdpdGhpbiBhIGNvbHVtbiBpbnRvIG11bHRpcGxlIGNvbHVtbnMKW2dncGxvdDJdKGh0dHBzOi8vZ2dwbG90Mi50aWR5dmVyc2Uub3JnLyl7dGFyZ2V0PSJfYmxhbmsifSAgICB8IHRvIG1ha2UgdmlzdWFsaXphdGlvbnMgd2l0aCBtdWx0aXBsZSBsYXllcnMKW2dncHVicl0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2dncHVici9pbmRleC5odG1sKXt0YXJnZXQ9Il9ibGFuayJ9ICAgIHwgdG8gZWFzaWx5IGFkZCByZWdyZXNzaW9uIGxpbmUgZXF1YXRpb25zIHRvIHBsb3RzCltmb3JjYXRzXShodHRwczovL2ZvcmNhdHMudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgfCB0byBjaGFuZ2UgZGV0YWlscyBhYm91dCBmYWN0b3JzIChjYXRlZ29yaWNhbCB2YXJpYWJsZXMpCltsbWVyVGVzdF0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2xtZXJUZXN0L2xtZXJUZXN0LnBkZil8IHRvIHBlcmZvcm0gbGluZWFyIG1peGVkIG1vZGVsIHRlc3RpbmcKW2Nhcl0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2Nhci9jYXIucGRmKXwgdG8gcGVyZm9ybSBMZXZlbmUncyBUZXN0IG9mIEhvbW9nZW5laXR5IG9mIFZhcmlhbmNlcwpbZ2dpcmFwaF0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2dnaXJhcGgvaW5kZXguaHRtbCl8IHRvIG1ha2UgcGxvdHMgaW50ZXJhY3RpdmUKW2dnZm9yY2VdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9nZ2ZvcmNlL2dnZm9yY2UucGRmKXwgdG8gbW9kaWZ5IGZhY2V0cyBpbiBwbG90cwpbdmlyaWRpc10oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL3ZpcmlkaXMvdmlnbmV0dGVzL2ludHJvLXRvLXZpcmlkaXMuaHRtbCl8IHRvIHBsb3QgaW4gY29sb3IgcGFsZXR0ZSB0aGF0IGlzIGVhc2lseSBpbnRlcnByZXRlZCBieSBjb2xvcmJsaW5kIGluZGl2aWR1YWxzCltjb3dwbG90XShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvY293cGxvdC92aWduZXR0ZXMvaW50cm9kdWN0aW9uLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gfCB0byBhbGxvdyBwbG90cyB0byBiZSBjb21iaW5lZApfX18KCgoKVGhlIGZpcnN0IHRpbWUgd2UgdXNlIGEgZnVuY3Rpb24sIHdlIHdpbGwgdXNlIHRoZSBgOjpgIHRvIGluZGljYXRlIHdoaWNoIHBhY2thZ2Ugd2UgYXJlIHVzaW5nLiBVbmxlc3Mgd2UgaGF2ZSBvdmVybGFwcGluZyBmdW5jdGlvbiBuYW1lcywgdGhpcyBpcyBub3QgbmVjZXNzYXJ5LCBidXQgd2Ugd2lsbCBpbmNsdWRlIGl0IGhlcmUgdG8gYmUgaW5mb3JtYXRpdmUgYWJvdXQgd2hlcmUgdGhlIGZ1bmN0aW9ucyB3ZSB3aWxsIHVzZSBjb21lIGZyb20uCgoKIyMjIENvbnRleHQKClRoZSBbU3RhdGUgb2YgR2xvYmFsIEFpcl0oaHR0cHM6Ly93d3cuc3RhdGVvZmdsb2JhbGFpci5vcmcvKXt0YXJnZXQ9Il9ibGFuayJ9IGlzIGEgcmVwb3J0IHJlbGVhc2VkIGV2ZXJ5IHllYXIgdG8gY29tbXVuaWNhdGUgdGhlIGltcGFjdCBvZiBhaXIgcG9sbHV0aW9uIG9uIHB1YmxpYyBoZWFsdGguIAoKVGhlIFtTdGF0ZSBvZiBHbG9iYWwgQWlyIDIwMTkgcmVwb3J0XShodHRwczovL3d3dy5zdGF0ZW9mZ2xvYmFsYWlyLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3NvZ2FfMjAxOV9yZXBvcnQucGRmKXt0YXJnZXQ9Il9ibGFuayJ9CndoaWNoIHVzZXMgZGF0YSBmcm9tIDIwMTcgc3RhdGVkIHRoYXQ6Cgo+IEFpciBwb2xsdXRpb24gaXMgdGhlICoqZmlmdGgqKiBsZWFkaW5nIHJpc2sgZmFjdG9yIGZvciBtb3J0YWxpdHkgd29ybGR3aWRlLiBJdCBpcyByZXNwb25zaWJsZSBmb3IgbW9yZQpkZWF0aHMgdGhhbiBtYW55IGJldHRlci1rbm93biByaXNrIGZhY3RvcnMgc3VjaCBhcyBtYWxudXRyaXRpb24sIGFsY29ob2wgdXNlLCBhbmQgcGh5c2ljYWwgaW5hY3Rpdml0eS4KRWFjaCB5ZWFyLCAqKm1vcmUqKiBwZW9wbGUgZGllIGZyb20gYWlyIHBvbGx1dGlvbuKAk3JlbGF0ZWQgZGlzZWFzZSB0aGFuIGZyb20gcm9hZCAqKnRyYWZmaWMgaW5qdXJpZXMqKiBvciAqKm1hbGFyaWEqKi4KCjxwIGFsaWduPSJjZW50ZXIiPgogIDxpbWcgd2lkdGg9IjYwMCIgc3JjPSJodHRwczovL3d3dy5oZWFsdGhlZmZlY3RzLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL1NvR0EtRmlndXJlcy0wMS5qcGciPgo8L3A+CgpUaGUgcmVwb3J0IGFsc28gc3RhdGVkIHRoYXQ6Cgo+SW4gMjAxNywgYWlyIHBvbGx1dGlvbiBpcyBlc3RpbWF0ZWQgdG8gaGF2ZSBjb250cmlidXRlZCB0byBjbG9zZSB0byA1IG1pbGxpb24KZGVhdGhzIGdsb2JhbGx5IOKAlCBuZWFybHkgKioxIGluIGV2ZXJ5IDEwIGRlYXRocyoqLgoKYGBge3IsIGVjaG8gPSBGQUxTRSwgb3V0LndpZHRoPSI4MDBweCJ9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoImltZyIsIjIwMTdkZWF0aHMucG5nIikpCmBgYAojIyMjIyBbW3NvdXJjZV1dKGh0dHBzOi8vd3d3LnN0YXRlb2ZnbG9iYWxhaXIub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc29nYV8yMDE5X2ZhY3Rfc2hlZXQucGRmKQoKVGhlIFtTdGF0ZSBvZiBHbG9iYWwgQWlyIDIwMTggcmVwb3J0XShodHRwczovL3d3dy5zdGF0ZW9mZ2xvYmFsYWlyLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3NvZ2EtMjAxOC1yZXBvcnQucGRmKXt0YXJnZXQ9Il9ibGFuayJ9ICB1c2luZyBkYXRhIGZyb20gMjAxNiB3aGljaCBzZXBhcmF0ZWQgZGlmZmVyZW50IHR5cGVzIG9mIGFpciBwb2xsdXRpb24sIGZvdW5kIHRoYXQgKipwYXJ0aWN1bGF0ZSBwb2xsdXRpb24gd2FzIHBhcnRpY3VsYXJseSBhc3NvY2lhdGVkIHdpdGggbW9ydGFsaXR5KiouCgpgYGB7ciwgZWNobyA9IEZBTFNFLCBvdXQud2lkdGg9IjgwMHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwiMjAxN21vcnRhbGl0eS5wbmciKSkKYGBgCgpUaGUgMjAxOSByZXBvcnQgc2hvd3MgdGhhdCB0aGUgaGlnaGVzdCBsZXZlbHMgb2YgZmluZSBwYXJ0aWN1bGF0ZSBwb2xsdXRpb24gb2NjdXJzIGluIEFmcmljYSBhbmQgQXNpYSBhbmQgdGhhdDoKCj4gTW9yZSB0aGFuICoqOTAlKiogb2YgcGVvcGxlIHdvcmxkd2lkZSBsaXZlIGluIGFyZWFzICoqZXhjZWVkaW5nKiogdGhlIFdvcmxkIEhlYWx0aCBPcmdhbml6YXRpb24gKFdITykgKipHdWlkZWxpbmUqKiBmb3IgaGVhbHRoeSBhaXIuIE1vcmUgdGhhbiBoYWxmIGxpdmUgaW4gYXJlYXMgdGhhdCBkbyBub3QgZXZlbiBtZWV0IFdIT+KAmXMgbGVhc3Qtc3RyaW5nZW50IGFpciBxdWFsaXR5IHRhcmdldC4KCmBgYHtyLCBlY2hvID0gRkFMU0UsIG91dC53aWR0aD0iODAwcHgifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJpbWciLCJQTXdvcmxkLnBuZyIpKQpgYGAKCkxvb2tpbmcgYXQgdGhlIFVTIHNwZWNpZmljYWxseSwgYWlyIHBvbGx1dGlvbiBsZXZlbHMgYXJlIGdlbmVyYWxseSBpbXByb3ZpbmcuIFRoZSBVUyBFbnZpcm9ubWVudGFsIFByb3RlY3Rpb24gQWdlbmN5IChFUEEpIGFsc28gcmVsZWFzZXMgYSByZXBvcnQgYWJvdXQgYWlyIHBvbGx1dGlvbiBsZXZlbHMgY2FsbGVkIFsqT3VyIE5hdGlvbidzIEFpcipdKGh0dHBzOi8vZ2lzcHViLmVwYS5nb3YvYWlyL3RyZW5kc3JlcG9ydC8yMDE5LyNob21lKXt0YXJnZXQ9Il9ibGFuayJ9LgoKYGBge3IsIGVjaG8gPSBGQUxTRX0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwgIlVTLnBuZyIpKQpgYGAKCiMjIyMjIFtbc291cmNlXV0oaHR0cHM6Ly9naXNwdWIuZXBhLmdvdi9haXIvdHJlbmRzcmVwb3J0LzIwMTkvZG9jdW1lbnRhdGlvbi9BaXJUcmVuZHNfRmx5ZXIucGRmKQoKSG93ZXZlciwgYWlyIHBvbGx1dGlvbiAqKmNvbnRpbnVlcyB0byBjb250cmlidXRlIHRvIGhlYWx0aCByaXNrIGZvciBBbWVyaWNhbnMqKiwgaW4gcGFydGljdWxhciBpbiAqKnJlZ2lvbnMgd2l0aCBoaWdoZXIgdGhhbiBuYXRpb25hbCBhdmVyYWdlIHJhdGVzKiogb2YgcG9sbHV0aW9uIHRoYXQgYWN0dWFsbHkgYXQgdGltZSBleGNlZWQgdGhlIHdvcmxkIGhlYWx0aCBvcmdhbml6YXRpb24ncyByZWNvbW1lbmRlZCBsZXZlbC4gVGh1cyBpdCBpcyBuZWNlc3NhcnkgdG8gb2J0YWluIGhpZ2ggc3BhdGlhbCBncmFudWxhcml0eSBpbiBlc3RpbWF0ZXMgb2YgYWlyIHBvbGx1dGlvbiBpbiBvcmRlciB0byBpZGVudGlmeSBsb2NhdGlvbnMgd2hlcmUgcG9wdWxhdGlvbnMgYXJlIGV4cGVyaWVuY2luZyBoYXJtZnVsIGxldmVscyBvZiBleHBvc3VyZS4KCgpZb3UgY2FuIHNlZSB0aGF0IGN1cnJlbnQgYWlyIHF1YWxpdHkgY29uZGl0aW9ucyBhdCB0aGlzIFt3ZWJzaXRlXShodHRwczovL2FxaWNuLm9yZy9jaXR5L3VzYS8pe3RhcmdldD0iX2JsYW5rIn0gYW5kIHlvdSB3aWxsIG5vdGljZSB2YXJpYXRpb24gYWNyb3NzIGRpZmZlcmVudCBjaXRpZXMuCgpIZXJlIHdlcmUgdGhlIGNvbmRpdGlvbnMgaW4gVG9wZWthIEthbnNhcyB3aGVuIHRoaXMgd2FzIHdyaXR0ZW46CgpgYGB7ciwgZWNobyA9IEZBTFNFfQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJpbWciLCAiS2Fuc2FzLnBuZyIpKQpgYGAKCkl0IHJlcG9ydHMgcGFydGljdWxhdGUgdmFsdWVzIHVzaW5nIHdoYXQgaXMgY2FsbGVkIHRoZSBbQWlyIFF1YWxpdHkgSW5kZXhdKGh0dHBzOi8vd3d3LmFpcm5vdy5nb3YvaW5kZXguY2ZtP2FjdGlvbj1hcWliYXNpY3MuYXFpKXt0YXJnZXQ9Il9ibGFuayJ9IHNjYWxlIChBUUkpLCB0aGlzIFtjYWxjdWxhdG9yXShodHRwczovL2Fpcm5vdy5nb3YvaW5kZXguY2ZtP2FjdGlvbj1haXJub3cuY2FsY3VsYXRvcil7dGFyZ2V0PSJfYmxhbmsifSBpbmRpY2F0ZXMgdGhhdCAxMTQgQVFJIGlzIGVxdWl2YWxlbnQgdG8gNDAuNyB1Zy9tXjNeIGFuZCBpcyBjb25zaWRlcmVkIHVuaGVhbHRoeSBmb3Igc2Vuc2l0aXZlIGluZGl2aWR1YWxzLiBUaHVzIHNvbWUgYXJlYXMgdmVyeSBtdWNoIGV4Y2VlZCB0aGUgV29ybGQgSGVhbHRoIE9yZ2FuaXphdGlvbiAoV0hPKSAgYW5udWFsIGV4cG9zdXJlIGd1aWRlbGluZSAoMTAgdWcvbV4zXikgYXQgY2VydGFpbiB0aW1lcyBhbmQgdGhpcyBtYXkgYWR2ZXJzZWx5IGFmZmVjdCB0aGUgaGVhbHRoIG9mIHBlb3BsZSBsaXZpbmcgaW4gdGhlc2UgbG9jYXRpb25zLgoKRnVydGhlcm1vcmUsIGFkdmVyc2UgaGVhbHRoIGVmZmVjdHMgaGF2ZSBiZWVuIGFzc29jaWF0ZWQgd2l0aCBwb3B1bGF0aW9ucyBleHBlcmllbmNpbmcgaGlnaGVyIHBvbGx1dGlvbiBleHBvc3VyZSBkZXNwaXRlIHRoZSBsZXZlbHMgYmVpbmcgYmVsb3cgc3VnZ2VzdGVkIGd1aWRlbGluZXMuIFNlY29uZGx5LCBpdCBhcHBlYXJzIHRoYXQgdGhlIGNvbXBvc2l0aW9uIG9mIHRoZSBwYXJ0aWN1bGF0ZSBtYXRlciBhbmQgdGhlIGluZmx1ZW5jZSBvZiBvdGhlciBkZW1vZ3JhcGhpYyBmYWN0b3JzIG1heSBtYWtlIHNwZWNpZmljIHBvcHVsYXRpb25zIG1vcmUgYXQgcmlzayBmb3IgYWR2ZXJzZSBoZWFsdGggZWZmZWN0cyBkdWUgdG8gYWlyIHBvbGx1dGlvbi4gU2VlIHRoaXMgW2FydGljbGVdKGh0dHBzOi8vd3d3Lm5lam0ub3JnL2RvaS9mdWxsLzEwLjEwNTYvTkVKTW9hMTcwMjc0Nyl7dGFyZ2V0PSJfYmxhbmsifSBmb3IgbW9yZSBkZXRhaWxzLgoKVGhlIG1vbml0b3IgZGF0YSB0aGF0IHdlIHdpbGwgdXNlIGluIHRoaXMgY2FzZSBzdHVkeSBjb21lcyBmcm9tIGEgc3lzdGVtIG9mIG1vbml0b3JzIGluIHdoaWNoIHJvdWdobHkgOTAlIGFyZSBsb2NhdGVkIHdpdGhpbiBjaXRpZXMuIFRodXMgdGhlcmUgaXMgYW4gKiplcXVpdHkgaXNzdWUqKiBpbiB0ZXJtcyBvZiBjYXB0dXJpbmcgdGhlIGFpciBwb2xsdXRpb24gbGV2ZWxzIG9mIG1vcmUgcnVyYWwgYXJlYXMuIFRoZXJlZm9yZSwgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBwb2xsdXRpb24gZXhwb3N1cmVzIGZvciB0aGUgaW5kaXZpZHVhbHMgbGl2aW5nIGluIHRoZXNlIGFyZWFzLCBtZXRob2RzIGxpa2UgbWFjaGluZSBsZWFybmluZyBjYW4gYmUgdmVyeSB1c2VmdWwgdG8gZXN0aW1hdGUgYWlyIHBvbGx1dGlvbiBsZXZlbHMgaW4gKiphcmVhcyB3aXRoIGxpdHRsZSB0byBubyBtb25pdG9yaW5nKiouCgpJbmRlZWQsIG1hY2hpbmUgbGVhcm5pbmcgbWV0aG9kcyBhcmUgaW4gZmFjdCB1c2VkIHRvIGJlIGFibGUgdG8gZXN0aW1hdGUgYWlyIHBvbGx1dGlvbiBpbiB0aGVzZSBsb3cgbW9uaXRvcmluZyBhcmVhcyBzbyB0aGF0IHdlIGNhbiBtYWtlIGEgbWFwIGxpa2UgdGhpcyB3aGVyZSB3ZSBoYXZlIGFubnVhbCBlc3RpbWF0ZXMgZm9yIGFsbCBvZiB0aGUgY29udGlndW91cyBVUzoKCjxwIGFsaWduPSJjZW50ZXIiPgogIDxpbWcgd2lkdGg9IjYwMCIgc3JjPSJodHRwczovL2FyYy1hbmdsZXJmaXNoLXdhc2hwb3N0LXByb2Qtd2FzaHBvc3QuczMuYW1hem9uYXdzLmNvbS9wdWJsaWMvU0FXT0VHQlhNVkdRN0FTNVBaNlVVT1g2RlkucG5nIj4KPC9wPgoKCiMjIyMjIFtbc291cmNlXV0oaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS91cmw/c2E9aSZ1cmw9aHR0cHMlM0ElMkYlMkZ3d3cud2FzaGluZ3RvbnBvc3QuY29tJTJGYnVzaW5lc3MlMkYyMDE5JTJGMTAlMkYyMyUyRmFpci1wb2xsdXRpb24taXMtZ2V0dGluZy13b3JzZS1kYXRhLXNob3ctbW9yZS1wZW9wbGUtYXJlLWR5aW5nJTJGJnBzaWc9QU92VmF3M3YtWkRUQlBuTFAyTVl0S2YzVW5kaiZ1c3Q9MTU4NTc4NDQ3OTA2ODAwMCZzb3VyY2U9aW1hZ2VzJmNkPXZmZSZ2ZWQ9MENBSVFqUnhxRndvVENQQ3luOWZ4eGVnQ0ZRQUFBQUFkQUFBQUFCQWQpCgpUaGlzIGlzIHdoYXQgd2UgYWltIHRvIGFjaGlldmUgaW4gdGhpcyBjYXNlIHN0dWR5LgoKIyMjIExpbWl0YXRpb25zCgpUaGVyZSBhcmUgc29tZSBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbnMgcmVnYXJkaW5nIHRoaXMgZGF0YSBhbmFseXNpcyB0byBrZWVwIGluIG1pbmQ6IAoKMSkgVGhlIGRhdGEgaW4gb3VyIGFuYWx5c2lzIGRvZXMgbm90IGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpY3VsYXRlIG1hdGVyLiBEaWZmZXJlbnQgdHlwZXMgb2YgcGFydGljdWxhdGVzIG1heSBiZSBtb3JlIGJlbmlnbiBvciBkZWxldGVyaW91cyBmb3IgaGVhbHRoIG91dGNvbWVzLgoKMikgT3V0ZG9vciBwb2xsdXRpb24gbGV2ZWxzIGFyZSBub3QgbmVjZXNzYXJpbHkgYW4gaW5kaWNhdGlvbiBvZiBvZiBpbmRpdmlkdWFsIGV4cG9zdXJlcy4gUGVvcGxlIHNwZW5kIGRpZmZlcmluZyBhbW91bnRzIG9mIHRpbWUgaW5kb29ycyBhbmQgb3V0ZG9vcnMgYW5kIGFyZSBleHBvc2VkIHRvIGRpZmZlcmVudCBwb2xsdXRpb24gbGV2ZWxzIGluZG9vcnMuIFBlb3BsZSBhcmUgbm93IGRldmVsb3BpbmcgcGVyc29uYWwgbW9uaXRvcmluZyBzeXN0ZW1zIHRvIHRyYWNrIGFpciBwb2xsdXRpb24gbGV2ZWxzIG9uIHRoZSBwZXJzb25hbCBsZXZlbC4KCk91ciBhbmFseXNpcyB3aWxsIHVzZSBhbm51YWwgbWVhbiBlc3RpbWF0ZXMsIGhvd2V2ZXIgcG9sbHV0aW9uIGxldmVscyBjYW4gdmFyeSBncmVhdGx5IGJ5IHNlYXNvbiwgZGF5IGFuZCBldmVuIGhvdXIuIFRoZXJlIGFyZSBkYXRhIHNvdXJjZXMgdGhhdCBoYXZlIGZpbmVyIGxldmVscyBvZiB0ZW1wb3JhbCBkYXRhLCBob3dldmVyIHdlIGFyZSBpbnRlcmVzdGVkIGluIGxvbmcgdGVybSBleHBvc3VyZXMsIGFzIHRoZXNlIGFwcGVhciB0byBiZSB0aGUgbW9zdCBpbmZsdWVudGlhbCBmb3IgaGVhbHRoIG91dGNvbWVzLCBzbyB3ZSBjaG9zZSB0byB1c2UgYW5udWFsIGxldmVsIGRhdGEuIAoKCiMjIFdoYXQgYXJlIHRoZSBkYXRhPwoKSW4gTWFjaGluZSBMZWFybmluZyBmb3IgcHJlZGljdGlvbiwgdGhlcmUgYXJlIHR3byBtYWluIHR5cGVzIG9mIHZhcmlhYmxlczoKCjEpIE91dGNvbWUgdmFyaWFibGUKMikgUHJlZGljdG9yIHZhcmlhYmxlcwoKVGhlICoqb3V0Y29tZSB2YXJpYWJsZSoqIGlzIHdoYXQgYXJlIHRyeWluZyB0byAqKnByZWRpY3QqKi4gSW4gYnVpbGRpbmcgb3VyIG1vZGVsIHdlIGFjdHVhbGx5IGhhdmUgdGhlIG91dGNvbWUgdmFyaWFibGUgZGF0YSwgYnV0IHdlIHdhbnQgdG8gc2VlIGhvdyB3ZWxsIG91ciBwcmVkaWN0b3IgdmFyaWFibGVzIGNhbiBleHBsYWluIHRoZSB2YXJpYXRpb24gaW4gb3VyIG91dGNvbWUgZGF0YS4gVGhpcyBnaXZlcyB1cyBhIHNlbnNlIG9mIGhvdyB3ZWxsIHdlIGNhbiB1c2UgdGhlIHByZWRpY3RvciB2YXJpYWJsZSBkYXRhIHRvIHByZWRpY3Qgb3VyIG91dGNvbWUgdmFyaWFibGUgbGV2ZWxzIHdoZW4gd2UgaW4gZmFjdCBkbyBub3QgaGF2ZSBkYXRhIGFib3V0IHRoZSBvdXRjb21lLgoKQXMgYSBzaW1wbGVyIGV4YW1wbGUsIGltYWdpbmUgdGhhdCB3ZSBoYXZlIGRhdGEgYWJvdXQgdGhlIHNhbGVzIGFuZCBjaGFyYWN0ZXJpc3RpY3Mgb2YgY2FycyBmcm9tIGxhc3QgeWVhciBhbmQgd2Ugd2FudCB0byBwcmVkaWN0IHdoaWNoIGNhcnMgbWlnaHQgc2VsbCB3ZWxsIHRoaXMgeWVhci4gV2UgZG8gbm90IGhhdmUgdGhlIHNhbGVzIGRhdGEgeWV0IGZvciB0aGlzIHllYXIsIGJ1dCB3ZSBkbyBrbm93IHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2Ygb3VyIGNhcnMgZm9yIHRoaXMgeWVhci4gV2UgY2FuIHVzZSBhIG1vZGVsIG9mIHRoZSBjaGFyYWN0ZXJpc3RpY3MgdGhhdCBleHBsYWluZWQgc2FsZXMgbGFzdCB5ZWFyIHRvIGVzdGltYXRlIHdoYXQgY2FycyBtaWdodCBzZWxsIHdlbGwgdGhpcyB5ZWFyLiBJbiB0aGlzIGNhc2UsIG91ciBvdXRjb21lIHZhcmlhYmxlIGlzIHRoZSBzYWxlIHBlcmZvcm1hbmNlIG9mIHRoZSBjYXJzLCB3aGlsZSB0aGUgZGlmZmVyZW50IGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgY2FycyBtYWtlIHVwIG91ciBwcmVkaWN0b3Igb3IgZXhwbGFuYXRvcnkgdmFyaWFibGVzLgoKSW4gdGhpcyBjYXNlIHN0dWR5LCB3ZSB3aWxsIGV2YWx1YXRlIGFpciBwb2xsdXRpb24gbW9uaXRvciBkYXRhIG9mIGZpbmUgcGFydGljdWxhdGUgbWF0ZXIgKFBNfjIuNX4pIGluIHRoZSBjb250aWd1b3VzIFVTIGZyb20gMjAwOCwgYXMgd2VsbCBhcyBkYXRhIGFib3V0IHBvcHVsYXRpb24gZGVuc2l0eSwgcm9hZCBkZW5zaXR5LCB1cmJhbml6YXRpb24gbGV2ZWxzLCBhbmQgTkFTQSBzYXRlbGxpdGUgZGF0YSB0byBkZXZlbG9wIG1vZGVscyB0byBwcmVkaWN0IGxvY2FsaXplZCBhaXIgcG9sbHV0aW9uIGxldmVscy4gCgpUaGUgbW9uaXRvciBkYXRhIHdpbGwgYmUgb3VyICoqb3V0Y29tZSB2YXJpYWJsZSoqLiAgV2Ugd2FudCB0byBkZXRlcm1pbmUgaWYgd2UgY2FuICoqcHJlZGljdCoqIGFpciBwb2xsdXRpb24gbGV2ZWxzIGJhc2VkIG9uIG90aGVyIHR5cGVzIG9mIGRhdGEsIGxpa2Ugcm9hZCBkZW5zaXR5IGFuZCBwb3B1bGF0aW9uIGRlbnNpdHkgdG8gc2VlIGlmIHdlIGNhbiB1c2UgdGhlc2UgZGF0YSB0byBwcmVkaWN0IGFpciBwb2xsdXRpb24gaW4gYXJlYXMgd2hlcmUgdGhlcmUgYXJlIG5vIG1vbml0b3JzLiAKCgojIyMgT3VyIG91dGNvbWUgdmFyaWFibGUKClRoZSBtb25pdG9yIGRhdGEgdGhhdCB3ZSB3aWxsIGJlIHVzaW5nIGNvbWVzIGZyb20gKipbZ3JhdmltZXRyaWMgbW9uaXRvcnNdKGh0dHBzOi8vcHVibGljbGFiLm9yZy93aWtpL2ZpbHRlci1wbSl7dGFyZ2V0PSJfYmxhbmsifSoqIG9wZXJhdGVkIGJ5IHRoZSBVUyBbRW5pdm9ybm1lbnRhbCBQcm90ZWN0aW9uIEFnZW5jeSAoRVBBKV0oaHR0cHM6Ly93d3cuZXBhLmdvdi8pe3RhcmdldD0iX2JsYW5rIn0uIFRoZXNlIG1vbml0b3JzIHVzZSBhIGZpbHRyYXRpb24gc3lzdGVtIHRvIHNwZWNpZmljYWxseSBjYXB0dXJlIGZpbmUgcGFydGljdWxhdGUgbWF0dGVyLiBUaGUgd2VpZ2h0IG9mIHRoaXMgbWF0dGVyIGlzIG1hbnVhbGx5IG1lYXN1cmVkIGRhaWx5IG9yIHdlZWtseS4gU2VlIFtoZXJlXShodHRwczovL3d3dzMuZXBhLmdvdi90dG5hbXRpMS9maWxlcy9hbWJpZW50L3BtMjUvc3BlYy9SVElHcmF2TWFzc1NPUEZJTkFMLnBkZil7dGFyZ2V0PSJfYmxhbmsifSBmb3IgdGhlIEVQQSBzdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlIGZvciBQTSBncmF2aW1ldHJpYyBhbmFseXNpcyBpbiAyMDA4LgoKCgpgYGB7ciwgZWNobyA9IEZBTFNFLCBvdXQud2lkdGg9IjE1MHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwiZmlsdGVyLnBuZyIpKQpgYGAKCiMjIyMjIFtbc291cmNlXShodHRwczovL3B1YmxpY2xhYi5vcmcvd2lraS9maWx0ZXItcG0pXQoKSGVyZSBpcyBhbiBpbWFnZSBvZiB3aGF0IHRoZSBncmF2aW1ldHJpYyBtb25pdG9ycyBsb29rIGxpa2U6CgpgYGB7ciwgZWNobyA9IEZBTFNFLCBvdXQud2lkdGg9IjEwMHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwibW9uaXRvci5wbmciKSkKYGBgCgoKR3JhdmltZXRyaWMgYW5hbHlzaXMgaXMgYWxzbyB1c2VkIGZvciBbZW1pc3Npb24gdGVzdGluZ10oaHR0cHM6Ly93d3cubXQuY29tL3VzL2VuL2hvbWUvYXBwbGljYXRpb25zL0xhYm9yYXRvcnlfd2VpZ2hpbmcvZW1pc3Npb25zLXRlc3RpbmctcGFydGljdWxhdGUtbWF0dGVyLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0uIFRoZSBzYW1lIGlkZWEgYXBwbGllczogYSBmcmVzaCBmaWx0ZXIgaXMgYXBwbGllZCBhbmQgdGhlIGRlc2lyZWQgYW1vdW50IG9mIHRpbWUgcGFzc2VzLCB0aGVuIHRoZSBmaWx0ZXIgaXMgcmVtb3ZlZCBhbmQgd2VpZ2hlZC4gCgpUaGVyZSBhcmUgW290aGVyIG1vbml0b3Jpbmcgc3lzdGVtc10oaHR0cHM6Ly93d3cuc2Vuc2lyaW9uLmNvbS9lbi9hYm91dC11cy9uZXdzcm9vbS9zZW5zaXJpb24tc3BlY2lhbGlzdC1hcnRpY2xlcy9wYXJ0aWN1bGF0ZS1tYXR0ZXItc2Vuc2luZy1mb3ItYWlyLXF1YWxpdHktbWVhc3VyZW1lbnRzLyl7dGFyZ2V0PSJfYmxhbmsifSB0aGF0IGNhbiBwcm92aWRlIGhvdXJseSBtZWFzdXJlbWVudHMsIGJ1dCB3ZSB3aWxsIG5vdCBiZSB1c2luZyBkYXRhIGZyb20gdGhlc2UgbW9uaXRvcnMgaW4gb3VyIGFuYWx5c2lzLiBHcmF2aW1ldHJpYyBhbmFseXNpcyBpcyBjb25zaWRlcmVkIHRvIGJlIGFtb25nIHRoZSBtb3N0IGFjY3VyYXRlIG1ldGhvZHMuCgpJbiBvdXIgY3N2LCB0aGUgKip2YWx1ZSoqIGNvbHVtbiBpbmRpY2F0ZXMgdGhlIFBNfjIuNX4gbW9uaXRvciBhdmVyYWdlIGZvciAyMDA4IGluIG1hc3Mgb2YgZmluZSBwYXJ0aWNsZXMvdm9sdW1lIG9mIGFpciBmb3IgODc2IGdyYXZpbWV0cmljIG1vbml0b3JzLiBUaGUgdW5pdHMgYXJlIG1pY3JvIGdyYW1zIG9mIGZpbmUgcGFydGljdWxhdGUgbWF0ZXIgKFBNKSB0aGF0IGlzIGxlc3MgdGhhbiAyLjUgbWljcm9tZXRlcnMgaW4gZGlhbWV0ZXIgcGVyIGN1YmljIG1ldGVyIG9mIGFpciAtIG1hc3MgY29uY2VudHJhdGlvbiAodWcvbV4zXikuICBSZWNhbGwgdGhlIHRoZSBXSE8gZXhwb3N1cmUgIGd1aWRlbGluZSBpcyA8IDEwIHVnL21eM14gb24gYXZlcmFnZSBhbm51YWxseSBmb3IgUE1+Mi41fi4KCiMjIyBPdXIgcHJlZGljdG9yIHZhcmlhYmxlcwoKVGhlcmUgYXJlIDQ4IHByZWRpY3RvciB2YXJpYWJsZXMgd2l0aCB2YWx1ZXMgZm9yIGVhY2ggb2YgdGhlIDg3NiBtb25pdG9ycyBpbmNsdWRlZCBpbiBvdXIgb3V0Y29tZSB2YXJpYWJsZS4gVGhlIGRhdGEgY29tZXMgZnJvbSB0aGUgVVMgW0VuaXZvcm5tZW50YWwgUHJvdGVjdGlvbiBBZ2VuY3kgKEVQQSldKGh0dHBzOi8vd3d3LmVwYS5nb3YvKXt0YXJnZXQ9Il9ibGFuayJ9LCB0aGUgW05hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbiAoTkFTQSldKGh0dHBzOi8vd3d3Lm5hc2EuZ292Lyl7dGFyZ2V0PSJfYmxhbmsifSwgdGhlIFVTIFtDZW5zdXNdKGh0dHBzOi8vd3d3LmNlbnN1cy5nb3YvYWJvdXQvd2hhdC9jZW5zdXMtYXQtYS1nbGFuY2UuaHRtbCl7dGFyZ2V0PSJfYmxhbmsifSwgYW5kIHRoZSBbTmF0aW9uYWwgQ2VudGVyIGZvciBIZWFsdGggU3RhdGlzdGljcyAoTkNIUyldKGh0dHBzOi8vd3d3LmNkYy5nb3YvbmNocy9hYm91dC9pbmRleC5odG0pe3RhcmdldD0iX2JsYW5rIn0uCgpWYXJpYWJsZSAgIHwgRGV0YWlscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tIHwtLS0tLS0tLS0tLS0tCioqaWQqKiAgfCBNb25pdG9yIG51bWJlciAgPGJyPiAtLSB0aGUgY291bnR5IG51bWJlciBpcyBpbmRpY2F0ZWQgYmVmb3JlIHRoZSBkZWNpbWFsIDxicj4gLS0gdGhlIG1vbml0b3IgbnVtYmVyIGlzIGluZGljYXRlZCBhZnRlciB0aGUgZGVjaW1hbCA8YnI+ICAqKkV4YW1wbGUqKjogMTA3My4wMDIzICBpcyBKZWZmZXJzb24gY291bnR5ICgxMDczKSBhbmQgLjAwMjMgb25lIG9mIDggbW9uaXRvcnMgCioqZmlwcyoqIHwgRmVkZXJhbCBpbmZvcm1hdGlvbiBwcm9jZXNzaW5nIHN0YW5kYXJkIG51bWJlciBmb3IgdGhlIGNvdW50eSB3aGVyZSB0aGUgbW9uaXRvciBpcyBsb2NhdGVkIDxicj4gLS0gNSBkaWdpdCBpZCBjb2RlIGZvciBjb3VudGllcyAoemVybyBpcyBvZnRlbiB0aGUgZmlyc3QgdmFsdWUgYW5kIHNvbWV0aW1lcyBpcyBub3Qgc2hvd24pIDxicj4gLS0gdGhlIGZpcnN0IDIgbnVtYmVycyBpbmRpY2F0ZSB0aGUgc3RhdGUgPGJyPiAtLSB0aGUgbGFzdCB0aHJlZSBudW1iZXJzIGluZGljYXRlIHRoZSBjb3VudHkgPGJyPiAgKipFeGFtcGxlKio6IEFsYWJhbWEncyBzdGF0ZSBjb2RlIGlzIDAxIGJlY2F1c2UgaXQgaXMgZmlyc3QgYWxwaGFiZXRpY2FsbHkgPGJyPiAobm90ZTogQWxhc2thIGFuZCBIYXdhaWkgYXJlIG5vdCBpbmNsdWRlZCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjb250aWd1b3VzIFVTKSAgCioqTGF0KiogfCBMYXRpdHVkZSBvZiB0aGUgbW9uaXRvciBpbiBkZWdyZWVzICAKKipMb24qKiB8IExvbmdpdHVkZSBvZiB0aGUgbW9uaXRvciBpbiBkZWdyZWVzICAKKipzdGF0ZSoqIHwgU3RhdGUgd2hlcmUgdGhlIG1vbml0b3IgaXMgbG9jYXRlZAoqKmNvdW50eSoqIHwgQ291bnR5IHdoZXJlIHRoZSBtb25pdG9yIGlzIGxvY2F0ZWQKKipjaXR5KiogfCBDaXR5IHdoZXJlIHRoZSBtb25pdG9yIGlzIGxvY2F0ZWQKKipDTUFRKiogIHwgRXN0aW1hdGVkIHZhbHVlcyBvZiBhaXIgcG9sbHV0aW9uIGZyb20gYSBjb21wdXRhdGlvbmFsIG1vZGVsIGNhbGxlZCBbKipDb21tdW5pdHkgTXVsdGlzY2FsZSBBaXIgUXVhbGl0eSAoQ01BUSkqKl0oaHR0cHM6Ly93d3cuZXBhLmdvdi9jbWFxKXt0YXJnZXQ9Il9ibGFuayJ9IDxicj4gLS0gIEEgbW9uaXRvcmluZyBzeXN0ZW0gdGhhdCBzaW11bGF0ZXMgdGhlIHBoeXNpY3Mgb2YgdGhlIGF0bW9zcGhlcmUgdXNpbmcgY2hlbWlzdHJ5IGFuZCB3ZWF0aGVyIGRhdGEgdG8gcHJlZGljdCB0aGUgYWlyIHBvbGx1dGlvbiA8YnI+IC0tICoqKkRvZXMgbm90IHVzZSBhbnkgb2YgdGhlIFBNfjIuNX4gZ3JhdmltZXRyaWMgbW9uaXRvcmluZyBkYXRhLioqKiAoVGhlcmUgaXMgYSB2ZXJzaW9uIHRoYXQgZG9lcyB1c2UgdGhlIGdyYXZpbWV0cmljIG1vbml0b3JpbmcgZGF0YSwgYnV0IG5vdCB0aGlzIG9uZSEpIDxicj4gLS0gRGF0YSBmcm9tIHRoZSBFUEEKKip6Y3RhKiogfCBbWmlwIENvZGUgVGFidWxhdGlvbiBBcmVhXShodHRwczovL3d3dzIuY2Vuc3VzLmdvdi9nZW8vcGRmcy9lZHVjYXRpb24vYnJvY2h1cmVzL1pDVEFzLnBkZil7dGFyZ2V0PSJfYmxhbmsifSB3aGVyZSB0aGUgbW9uaXRvciBpcyBsb2NhdGVkIDxicj4gLS0gUG9zdGFsIFppcCBjb2RlcyBhcmUgY29udmVydGVkIGludG8gImdlbmVyYWxpemVkIGFyZWFsIHJlcHJlc2VudGF0aW9ucyIgdGhhdCBhcmUgbm9uLW92ZXJsYXBwaW5nICA8YnI+IC0tIERhdGEgZnJvbSB0aGUgMjAxMCBDZW5zdXMgIAoqKnpjdGFfYXJlYSoqIHwgTGFuZCBhcmVhIG9mIHRoZSB6aXAgY29kZSBhcmVhIGluIG1ldGVycyBzcXVhcmVkICA8YnI+IC0tIERhdGEgZnJvbSB0aGUgMjAxMCBDZW5zdXMgIAoqKnpjdGFfcG9wKiogfCBQb3B1bGF0aW9uIGluIHRoZSB6aXAgY29kZSBhcmVhICA8YnI+IC0tIERhdGEgZnJvbSB0aGUgMjAxMCBDZW5zdXMgIAoqKmltcF9hNTAwKiogfCBJbXBlcnZpb3VzIHN1cmZhY2UgbWVhc3VyZSA8YnI+IC0tIFdpdGhpbiBhIGNpcmNsZSB3aXRoIGEgcmFkaXVzIG9mIDUwMCBtZXRlcnMgYXJvdW5kIHRoZSBtb25pdG9yIDxicj4gLS0gSW1wZXJ2aW91cyBzdXJmYWNlIGFyZSByb2FkcywgY29uY3JldGUsIHBhcmtpbmcgbG90cywgYnVpbGRpbmdzIDxicj4gLS0gVGhpcyBpcyBhIG1lYXN1cmUgb2YgZGV2ZWxvcG1lbnQgCioqaW1wX2ExMDAwKiogfCBJbXBlcnZpb3VzIHN1cmZhY2UgbWVhc3VyZSA8YnI+IC0tICBXaXRoaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAxMDAwIG1ldGVycyBhcm91bmQgdGhlIG1vbml0b3IKKippbXBfYTUwMDAqKiB8IEltcGVydmlvdXMgc3VyZmFjZSBtZWFzdXJlIDxicj4gLS0gIFdpdGhpbiBhIGNpcmNsZSB3aXRoIGEgcmFkaXVzIG9mIDUwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAgCioqaW1wX2ExMDAwMCoqIHwgSW1wZXJ2aW91cyBzdXJmYWNlIG1lYXN1cmUgPGJyPiAtLSAgV2l0aGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMTAwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAgIAoqKmltcF9hMTUwMDAqKiB8IEltcGVydmlvdXMgc3VyZmFjZSBtZWFzdXJlIDxicj4gLS0gIFdpdGhpbiBhIGNpcmNsZSB3aXRoIGEgcmFkaXVzIG9mIDE1MDAwIG1ldGVycyBhcm91bmQgdGhlIG1vbml0b3IgIAoqKmNvdW50eV9hcmVhKiogfCBMYW5kIGFyZWEgb2YgdGhlIGNvdW50eSBvZiB0aGUgbW9uaXRvciBpbiBtZXRlcnMgc3F1YXJlZCAgCioqY291bnR5X3BvcCoqIHwgUG9wdWxhdGlvbiBvZiB0aGUgY291bnR5IG9mIHRoZSBtb25pdG9yICAKKipMb2dfZGlzdF90b19wcmlzZWMqKiB8IExvZyAoTmF0dXJhbCBsb2cpIGRpc3RhbmNlIHRvIGEgcHJpbWFyeSBvciBzZWNvbmRhcnkgcm9hZCBmcm9tIHRoZSBtb25pdG9yIDxicj4gLS0gSGlnaHdheSBvciBtYWpvciByb2FkICAKKipsb2dfcHJpX2xlbmd0aF81MDAwKiogfCBDb3VudCBvZiBwcmltYXJ5IHJvYWQgbGVuZ3RoIGluIG1ldGVycyBpbiBhIGNpcmNsZSB3aXRoIGEgcmFkaXVzIG9mIDUwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpIDxicj4gLS0gSGlnaHdheXMgb25seSAgCioqbG9nX3ByaV9sZW5ndGhfMTAwMDAqKiB8IENvdW50IG9mIHByaW1hcnkgcm9hZCBsZW5ndGggaW4gbWV0ZXJzIGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMTAwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpIDxicj4gLS0gSGlnaHdheXMgb25seSAgCioqbG9nX3ByaV9sZW5ndGhfMTUwMDAqKiB8IENvdW50IG9mIHByaW1hcnkgcm9hZCBsZW5ndGggaW4gbWV0ZXJzIGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMTUwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpIDxicj4gLS0gSGlnaHdheXMgb25seSAgCioqbG9nX3ByaV9sZW5ndGhfMjUwMDAqKiB8IENvdW50IG9mIHByaW1hcnkgcm9hZCBsZW5ndGggaW4gbWV0ZXJzIGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMjUwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpIDxicj4gLS0gSGlnaHdheXMgb25seSAgCioqbG9nX3ByaXNlY19sZW5ndGhfNTAwKiogfCBDb3VudCBvZiBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgcm9hZCBsZW5ndGggaW4gbWV0ZXJzIGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgNTAwIG1ldGVycyBhcm91bmQgdGhlIG1vbml0b3IgKE5hdHVyYWwgbG9nKSAgPGJyPiAtLSBIaWdod2F5IGFuZCBzZWNvbmRhcnkgcm9hZHMgIAoqKmxvZ19wcmlzZWNfbGVuZ3RoXzEwMDAqKiB8IENvdW50IG9mIHByaW1hcnkgYW5kIHNlY29uZGFyeSByb2FkIGxlbmd0aCBpbiBtZXRlcnMgaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAxMDAwIG1ldGVycyBhcm91bmQgdGhlIG1vbml0b3IgKE5hdHVyYWwgbG9nKSAgPGJyPiAtLSBIaWdod2F5IGFuZCBzZWNvbmRhcnkgcm9hZHMgIAoqKmxvZ19wcmlzZWNfbGVuZ3RoXzUwMDAqKiB8IENvdW50IG9mIHByaW1hcnkgYW5kIHNlY29uZGFyeSByb2FkIGxlbmd0aCBpbiBtZXRlcnMgaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiA1MDAwIG1ldGVycyBhcm91bmQgdGhlIG1vbml0b3IgKE5hdHVyYWwgbG9nKSAgPGJyPiAtLSBIaWdod2F5IGFuZCBzZWNvbmRhcnkgcm9hZHMgIAoqKmxvZ19wcmlzZWNfbGVuZ3RoXzEwMDAwKiogfCBDb3VudCBvZiBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgcm9hZCBsZW5ndGggaW4gbWV0ZXJzIGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMTAwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpICA8YnI+IC0tIEhpZ2h3YXkgYW5kIHNlY29uZGFyeSByb2FkcyAgCioqbG9nX3ByaXNlY19sZW5ndGhfMTUwMDAqKiB8IENvdW50IG9mIHByaW1hcnkgYW5kIHNlY29uZGFyeSByb2FkIGxlbmd0aCBpbiBtZXRlcnMgaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAxNTAwMCBtZXRlcnMgYXJvdW5kIHRoZSBtb25pdG9yIChOYXR1cmFsIGxvZykgIDxicj4gLS0gSGlnaHdheSBhbmQgc2Vjb25kYXJ5IHJvYWRzICAKKipsb2dfcHJpc2VjX2xlbmd0aF8yNTAwMCoqIHwgQ291bnQgb2YgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IHJvYWQgbGVuZ3RoIGluIG1ldGVycyBpbiBhIGNpcmNsZSB3aXRoIGEgcmFkaXVzIG9mIDI1MDAwIG1ldGVycyBhcm91bmQgdGhlIG1vbml0b3IgKE5hdHVyYWwgbG9nKSAgPGJyPiAtLSBIaWdod2F5IGFuZCBzZWNvbmRhcnkgcm9hZHMgICAgICAKKipsb2dfbmVpXzIwMDhfcG0yNV9zdW1fMTAwMDAqKiB8IFRvbnMgb2YgZW1pc3Npb25zIGZyb20gbWFqb3Igc291cmNlcyBkYXRhIGJhc2UgKGFubnVhbCBkYXRhKSBzdW0gb2YgYWxsIHNvdXJjZXMgd2l0aGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMTAwMDAgbWV0ZXJzIG9mIGRpc3RhbmNlIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpICAgIAoqKmxvZ19uZWlfMjAwOF9wbTI1X3N1bV8xNTAwMCoqIHwgVG9ucyBvZiBlbWlzc2lvbnMgZnJvbSBtYWpvciBzb3VyY2VzIGRhdGEgYmFzZSAoYW5udWFsIGRhdGEpIHN1bSBvZiBhbGwgc291cmNlcyB3aXRoaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAxNTAwMCBtZXRlcnMgb2YgZGlzdGFuY2UgYXJvdW5kIHRoZSBtb25pdG9yIChOYXR1cmFsIGxvZykgICAgIAoqKmxvZ19uZWlfMjAwOF9wbTI1X3N1bV8yNTAwMCoqIHwgVG9ucyBvZiBlbWlzc2lvbnMgZnJvbSBtYWpvciBzb3VyY2VzIGRhdGEgYmFzZSAoYW5udWFsIGRhdGEpIHN1bSBvZiBhbGwgc291cmNlcyB3aXRoaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAyNTAwMCBtZXRlcnMgb2YgZGlzdGFuY2UgYXJvdW5kIHRoZSBtb25pdG9yIChOYXR1cmFsIGxvZykgICAgIAoqKmxvZ19uZWlfMjAwOF9wbTEwX3N1bV8xMDAwMCoqIHwgVG9ucyBvZiBlbWlzc2lvbnMgZnJvbSBtYWpvciBzb3VyY2VzIGRhdGEgYmFzZSAoYW5udWFsIGRhdGEpIHN1bSBvZiBhbGwgc291cmNlcyB3aXRoaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAxMDAwMCBtZXRlcnMgb2YgZGlzdGFuY2UgYXJvdW5kIHRoZSBtb25pdG9yIChOYXR1cmFsIGxvZykgICAgICAKKipsb2dfbmVpXzIwMDhfcG0xMF9zdW1fMTUwMDAqKnwgVG9ucyBvZiBlbWlzc2lvbnMgZnJvbSBtYWpvciBzb3VyY2VzIGRhdGEgYmFzZSAoYW5udWFsIGRhdGEpIHN1bSBvZiBhbGwgc291cmNlcyB3aXRoaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAxNTAwMCBtZXRlcnMgb2YgZGlzdGFuY2UgYXJvdW5kIHRoZSBtb25pdG9yIChOYXR1cmFsIGxvZykgICAgICAKKipsb2dfbmVpXzIwMDhfcG0xMF9zdW1fMjUwMDAqKiB8IFRvbnMgb2YgZW1pc3Npb25zIGZyb20gbWFqb3Igc291cmNlcyBkYXRhIGJhc2UgKGFubnVhbCBkYXRhKSBzdW0gb2YgYWxsIHNvdXJjZXMgd2l0aGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMjUwMDAgbWV0ZXJzIG9mIGRpc3RhbmNlIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpICAgICAgCioqcG9wZGVuc19jb3VudHkqKiB8IFBvcHVsYXRpb24gZGVuc2l0eSAobnVtYmVyIG9mIHBlb3BsZSBwZXIga2lsb21ldGVyIHNxdWFyZWQgYXJlYSBvZiB0aGUgY291bnR5KQoqKnBvcGRlbnNfemN0YSoqIHwgUG9wdWxhdGlvbiBkZW5zaXR5IChudW1iZXIgb2YgcGVvcGxlIHBlciBraWxvbWV0ZXIgc3F1YXJlZCBhcmVhIG9mIHpjdGEpCioqbm9ocyoqIHwgUGVyY2VudGFnZSBvZiBwZW9wbGUgaW4gemN0YSBhcmVhIHdoZXJlIHRoZSBtb25pdG9yIGlzIHRoYXQgKipkbyBub3QgaGF2ZSBhIGhpZ2ggc2Nob29sIGRlZ3JlZSoqIDxicj4gLS0gRGF0YSBmcm9tIHRoZSBDZW5zdXMKKipzb21laHMqKiB8IFBlcmNlbnRhZ2Ugb2YgcGVvcGxlIGluIHpjdGEgYXJlYSB3aGVyZSB0aGUgbW9uaXRvciB3aG9zZSBoaWdoZXN0IGZvcm1hbCBlZHVjYXRpb25hbCBhdHRhaW5tZW50IHdhcyAqKnNvbWUgaGlnaCBzY2hvb2wgZWR1Y2F0aW9uKiogPGJyPiAtLSBEYXRhIGZyb20gdGhlIENlbnN1cwoqKmhzKiogfCBQZXJjZW50YWdlIG9mIHBlb3BsZSBpbiB6Y3RhIGFyZWEgd2hlcmUgdGhlIG1vbml0b3Igd2hvc2UgaGlnaGVzdCBmb3JtYWwgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCB3YXMgY29tcGxldGluZyBhICoqaGlnaCBzY2hvb2wgZGVncmVlKiogPGJyPiAtLSBEYXRhIGZyb20gdGhlIENlbnN1cyAgCioqc29tZWNvbGxlZ2UqKiB8IFBlcmNlbnRhZ2Ugb2YgcGVvcGxlIGluIHpjdGEgYXJlYSB3aGVyZSB0aGUgbW9uaXRvciB3aG9zZSBoaWdoZXN0IGZvcm1hbCBlZHVjYXRpb25hbCBhdHRhaW5tZW50IHdhcyBjb21wbGV0aW5nICoqc29tZSBjb2xsZWdlIGVkdWNhdGlvbioqIDxicj4gLS0gRGF0YSBmcm9tIHRoZSBDZW5zdXMgCioqYXNzb2NpYXRlKiogfCBQZXJjZW50YWdlIG9mIHBlb3BsZSBpbiB6Y3RhIGFyZWEgd2hlcmUgdGhlIG1vbml0b3Igd2hvc2UgaGlnaGVzdCBmb3JtYWwgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCB3YXMgY29tcGxldGluZyBhbiAqKmFzc29jaWF0ZSBkZWdyZWUqKiA8YnI+IC0tIERhdGEgZnJvbSB0aGUgQ2Vuc3VzIAoqKmJhY2hlbG9yKiogfCBQZXJjZW50YWdlIG9mIHBlb3BsZSBpbiB6Y3RhIGFyZWEgd2hlcmUgdGhlIG1vbml0b3Igd2hvc2UgaGlnaGVzdCBmb3JtYWwgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCB3YXMgYSAqKmJhY2hlbG9yJ3MgZGVncmVlKiogPGJyPiAtLSBEYXRhIGZyb20gdGhlIENlbnN1cyAKKipncmFkKiogfCBQZXJjZW50YWdlIG9mIHBlb3BsZSBpbiB6Y3RhIGFyZWEgd2hlcmUgdGhlIG1vbml0b3Igd2hvc2UgaGlnaGVzdCBmb3JtYWwgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCB3YXMgYSAqKmdyYWR1YXRlIGRlZ3JlZSoqIDxicj4gLS0gRGF0YSBmcm9tIHRoZSBDZW5zdXMgCioqcG92KiogfCBQZXJjZW50YWdlIG9mIHBlb3BsZSBpbiB6Y3RhIGFyZWEgd2hlcmUgdGhlIG1vbml0b3IgaXMgdGhhdCBsaXZlZCBpbiBbKipwb3ZlcnR5KipdKGh0dHBzOi8vYXNwZS5oaHMuZ292LzIwMDgtaGhzLXBvdmVydHktZ3VpZGVsaW5lcykgaW4gMjAwOCAtIG9yIHdvdWxkIGl0IGhhdmUgYmVlbiAyMDA3IGd1aWRlbGluZXM/P2h0dHBzOi8vYXNwZS5oaHMuZ292LzIwMDctaGhzLXBvdmVydHktZ3VpZGVsaW5lcyA8YnI+IC0tIERhdGEgZnJvbSB0aGUgQ2Vuc3VzICAKKipoc19vcmxlc3MqKiB8ICBQZXJjZW50YWdlIG9mIHBlb3BsZSBpbiB6Y3RhIGFyZWEgd2hlcmUgdGhlIG1vbml0b3Igd2hvc2UgaGlnaGVzdCBmb3JtYWwgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCB3YXMgYSAqKmhpZ2ggc2Nob29sIGRlZ3JlZSBvciBsZXNzKiogKHN1bSBvZiBub2hzLCBzb21laHMsIGFuZCBocykgIAoqKnVyYzIwMTMqKiB8IFsyMDEzIFVyYmFuLXJ1cmFsIGNsYXNzaWZpY2F0aW9uXShodHRwczovL3d3dy5jZGMuZ292L25jaHMvZGF0YS9zZXJpZXMvc3JfMDIvc3IwMl8xNjYucGRmKXt0YXJnZXQ9Il9ibGFuayJ9IG9mIHRoZSBjb3VudHkgd2hlcmUgdGhlIG1vbml0b3IgaXMgbG9jYXRlZCA8YnI+IC0tIDYgY2F0ZWdvcnkgdmFyaWFibGUgLSAxIGlzIHRvdGFsbHkgdXJiYW4gNiBpcyBjb21wbGV0ZWx5IHJ1cmFsIDxicj4gIC0tIERhdGEgZnJvbSB0aGUgTmF0aW9uYWwgQ2VudGVyIGZvciBIZWFsdGggU3RhdGlzdGljc10oaHR0cHM6Ly93d3cuY2RjLmdvdi9uY2hzL2luZGV4Lmh0bSl7dGFyZ2V0PSJfYmxhbmsifSAgICAgCioqdXJjMjAwNioqIHwgWzIwMDYgVXJiYW4tcnVyYWwgY2xhc3NpZmljYXRpb25dKGh0dHBzOi8vd3d3LmNkYy5nb3YvbmNocy9kYXRhL3Nlcmllcy9zcl8wMi9zcjAyXzE1NC5wZGYpe3RhcmdldD0iX2JsYW5rIn0gb2YgdGhlIGNvdW50eSB3aGVyZSB0aGUgbW9uaXRvciBpcyBsb2NhdGVkIDxicj4gLS0gNiBjYXRlZ29yeSB2YXJpYWJsZSAtIDEgaXMgdG90YWxseSB1cmJhbiA2IGlzIGNvbXBsZXRlbHkgcnVyYWwgPGJyPiAtLSBEYXRhIGZyb20gdGhlIFtOYXRpb25hbCBDZW50ZXIgZm9yIEhlYWx0aCBTdGF0aXN0aWNzXShodHRwczovL3d3dy5jZGMuZ292L25jaHMvaW5kZXguaHRtKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICAKKiphb2QqKiB8IEFlcm9zb2wgT3B0aWNhbCBEZXB0aCBtZWFzdXJlbWVudCBmcm9tIGEgTkFTQSBzYXRlbGxpdGUgPGJyPiAtLSBiYXNlZCBvbiB0aGUgZGVmcmFjdGlvbiBvZiBhIGxhc2VyIDxicj4gLS0gdXNlZCBhcyBhIHByb3h5IG9mIHBhcnRpY3VsYXRlIHBvbGx1dGlvbiA8YnI+IC0tIHVuaXQtbGVzcyAtIGhpZ2hlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSBwb2xsdXRpb24gPGJyPiAtLSBEYXRhIGZyb20gTkFTQSAgCgpNYW55IG9mIHRoZXNlIHByZWRpY3RvciB2YXJpYWJsZXMgaGF2ZSB0byBkbyB3aXRoIHRoZSBjaXJjdWxhciBhcmVhIGFyb3VuZCB0aGUgbW9uaXRvciBjYWxsZWQgdGhlICJidWZmZXIiLiBUaGVzZSBhcmUgaWxsdXN0cmF0ZWQgaW4gdGhlIGZvbGxvd2luZyBmaWd1cmU6CgpgYGB7ciwgZWNobyA9IEZBTFNFLCBvdXQud2lkdGggPSAiODAwcHgiLH0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwgInJlZ3Jlc3Npb24ucG5nIikpCmBgYAoKIyMjIyMgW1tzb3VyY2VdKGh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvcHVibWVkLzE1MjkyOTA2KV0KCgoKIyMgRGF0YSBJbXBvcnQKCldlIGhhdmUgb25lIENTViBmaWxlIHRoYXQgY29udGFpbnMgYm90aCBvdXIgc2luZ2xlICoqb3V0Y29tZSB2YXJpYWJsZSoqIGFuZCBhbGwgb2Ygb3VyICoqcHJlZGljdG9yIHZhcmlhYmxlcyoqLgoKTGV0J3MgaW1wb3J0IG91ciBkYXRhIGludG8gUiBub3cgc28gdGhhdCB3ZSBjYW4gZXhwbG9yZSB0aGUgZGF0YSBmdXJ0aGVyLiBXZSB3aWxsIGNhbGwgb3VyIGRhdGEgb2JqZWN0IGBwbWAgZm9yIHBhcnRpY3VsYXRlIG1hdHRlci4KCmBgYHtyfQpwbSA8LXJlYWRyOjpyZWFkX2NzdihoZXJlKCJkb2NzIiwgInBtMjVfZGF0YS5jc3YiKSkKYGBgCgojIyBEYXRhIEV4cGxvcmF0aW9uIGFuZCBXcmFuZ2xpbmcKClRoZSBmaXJzdCBzdGVwIGluIHBlcmZvcm1pbmcgYSBtYWNoaW5lIGxlYXJuaW5nIGFuYWx5c2lzIGlzIHRvIGV4cGxvcmUgdGhlIGRhdGEgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHZhcmlhYmxlcyAgaW5jbHVkZWQgaW4gdGhlIGRhdGEsIGFzIHdlIG1heSBsZWFybiBhYm91dCBpbXBvcnRhbnQgZGV0YWlscyBhYm91dCB0aGUgZGF0YSB0aGF0IHdlIHNob3VsZCBrZWVwIGluIG1pbmQgYXMgd2UgdHJ5IHRvIHByZWRpY3Qgb3VyIG91dGNvbWUgdmFyaWFibGUuCgpGaXJzdCBsZXQncyBqdXN0IGdldCBhIGdlbmVyYWwgc2Vuc2Ugb2Ygb3VyIGRhdGEuIFdlIGNhbiBkbyB0aGF0IHVzaW5nIHRoZSBgZ2xpbXBzZSgpYCBmdW5jdGlvbiBvZiB0aGUgYGRwbHlyYCBwYWNrYWdlIChpdCBpcyBhbHNvIGluIHRoZSBgdGliYmxlYCBwYWNrYWdlKS4KCldlIHdpbGwgYWxzbyB1c2UgdGhlIGAlPiVgIHBpcGUgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBpbnB1dCBmb3IgbGF0ZXIgc2VxdWVudGlhbCBzdGVwcy4gVGhpcyB3aWxsIG1ha2UgbW9yZSBzZW5zZSB3aGVuIHdlIGhhdmUgbXVsdGlwbGUgc2VxdWVudGlhbCBzdGVwcyB1c2luZyB0aGUgc2FtZSBkYXRhIG9iamVjdC4gVG8gdXNlIHRoZSBwaXBlIG5vdGF0aW9uIHdlIG5lZWQgdG8gaW5zdGFsbCBhbmQgbG9hZCBkcGx5ciBhcyB3ZWxsLgoKRm9yIGV4YW1wbGUgaGVyZSB3ZSB3aWxsIGZpcnN0IGdyYWIgdGhlIGBwbWAgZGF0YSBvYmplY3QsIHRoZW4gd2UgdXNlIHRoZSBgZ2xpbXBzZSgpYCBmdW5jdGlvbiBvbiBpdCBiYXNlZCBvbiB0aGUgcGlwZSBub3RhdGlvbi4KCgpgYGB7cn0KcG0gJT4lCiAgZHBseXI6OmdsaW1wc2UoKQpgYGAKCldlIGNhbiBzZWUgdGhhdCB0aGVyZSBhcmUgODc2IG1vbml0b3JzIGFuZCB0aGF0IHdlIGhhdmUgNTAgdG90YWwgdmFyaWFibGVzIC0gb25lIG9mIHdoaWNoIGlzIHRoZSBvdXRjb21lLiBJbiB0aGlzIGNhc2Ugb3VyIG91dGNvbWUgdmFyaWFibGUgaXMgY2FsbGVkIGB2YWx1ZWAuIAoKTm90aWNlIHRoYXQgc29tZSBvZiB0aGUgdmFyaWFibGVzIHRoYXQgd2Ugd291bGQgdGhpbmsgb2YgYXMgZmFjdG9ycyAoY2F0ZWdvcmljYWwpIGFyZSBjdXJyZW50bHkgb2YgY2xhc3MgZG91YmxlIGFzIGluZGljYXRlZCBieSB0aGUgYDxkYmw+YCBqdXN0IHRvIHRoZSByaWdodCBvZiB0aGUgY29sdW1uIG5hbWVzL3ZhcmlhYmxlIG5hbWVzIGluIHRoZSBgZ2xpbXBzZSgpYCBvdXRwdXQuIEZvciBleGFtcGxlIHRoZSBtb25pdG9yIElEIChpZCksIHRoZSBGZWRlcmFsIEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgU3RhbmRhcmQgbnVtYmVyIGZvciB0aGUgY291bnR5IHdoZXJlIHRoZSBtb25pdG9yIHdhcyBsb2NhdGVkIChmaXBzKSwgYXMgd2VsbCBhcyB0aGUgemN0YQoKTGV0J3MgY29udmVydCB0aGVzZSB2YXJpYWJsZXMgaW50byBmYWN0b3JzLiBXZSBjYW4gZG8gdGhpcyB1c2luZyB0aGUgYG11dGF0ZV9hdCgpYCBmdW5jdGlvbiBvZiB0aGUgYGRwbHlyYCBwYWNrYWdlIGFuZCB0aGUgYGFzLmZhY3RvcigpYCBiYXNlIGZ1bmN0aW9uLiAKCkluIHRoaXMgY2FzZSB3ZSBhcmUgYWxzbyB1c2luZyB0aGUgbWFncml0dHIgYXNzaWdubWVudCBwaXBlIG9yIGRvdWJsZSBwaXBlIHRoYXQgbG9va3MgbGlrZSB0aGlzIGAlPD4lYCBvZiB0aGUgYG1hZ3JpdHRyYCBwYWNrYWdlLiBUaGlzIGFsbG93cyB1cyB1c2UgdGhlIGBwbWAgZGF0YSBhcyBpbnB1dCBidXQgYWxzbyByZWFzc2lnbiB0aGUgb3V0cHV0IHRvIHRoZSBzYW1lIGRhdGEgb2JqZWN0IG5hbWUuCgpgYGB7cn0KcG0gJTw+JQogIGRwbHlyOjptdXRhdGVfYXQodmFycyhpZCwgZmlwcywgemN0YSksIGFzLmZhY3RvcikgCgpnbGltcHNlKHBtKQpgYGAKCkdyZWF0ISBOb3cgd2UgY2FuIHNlZSB0aGF0IHRoZXNlIHZhcmlhYmxlcyBhcmUgbm93IGZhY3RvcnMgYXMgaW5kaWNhdGVkIGJ5IGA8ZmN0PmAgYWZ0ZXIgdGhlIHZhcmlhYmxlIG5hbWUuCgpUaGUgYHNraW0oKWAgZnVuY3Rpb24gb2YgdGhlIGBza2ltcmAgcGFja2FnZSBpcyBhbHNvIHJlYWxseSBoZWxwZnVsIGZvciBnZXR0aW5nIGEgZ2VuZXJhbCBzZW5zZSBvZiB5b3VyIGRhdGEuCgpgYGB7cn0Kc2tpbShwbSkKYGBgCgpOb3RpY2UgaG93IHRoZXJlIGlzIGEgY29sdW1uIGNhbGxlZCBgbl9taXNzaW5nYCBhYm91dCB0aGUgbnVtYmVyIG9mIHZhbHVlcyB0aGF0IGFyZSBtaXNzaW5nLiBJdCBsb29rcyBsaWtlIG91ciBkYXRhIGlzIHZlcnkgY29tcGxldGUgYW5kIHdlIGRvIG5vdCBoYXZlIGFueSBtaXNzaW5nIGRhdGEuIFRoaXMgaXMgYWxzbyBpbmRpY2F0ZWQgYnkgdGhlIGBjb21wbGV0ZV9yYXRlYCB2YXJpYWJsZSwgd2hpY2ggc2hvd3MgdGhlIHJhdGlvIG9mIGNvbXBsZXRlbmVzcywgaW4gb3VyIGNhc2UgYWxsIHZhcmlhYmxlcyBoYXZlIGEgdmFsdWUgb2YgMSBpbmRpY2F0aW5nIHRoZXkgYXJlIGZ1bGx5IGNvbXBsZXRlLgoKVGhlIGBuX3VucWl1ZWAgY29sdW1uIHNob3dzIHVzIHRoZSBudW1iZXIgb2YgdW5pcXVlIHZhbHVlcyBmb3IgZWFjaCBvZiBvdXIgY29sdW1ucy4gV2UgY2FuIHNlZSB0aGF0IHRoZXJlIGFyZSA0OSBzdGF0ZXMgcmVwcmVzZW50ZWQgaW4gdGhlIGRhdGEsIGFuZCB3ZSBrbm93IHRoYXQgdGhlIGRhdGEgc2hvdWxkIGJlIG9mIHRoZSBjb250aWd1b3VzIHN0YXRlcy4gTGV0J3MgdGFrZSBhIGxvb2sgdG8gc2VlIHdoaWNoIHN0YXRlcyBhcmUgaW5jbHVkZWQ6CgojIyMjIHsuc2Nyb2xsYWJsZSB9CmBgYHtyfQojIFNjcm9sbCB0aHJvdWdoIHRoZSBvdXRwdXQhCnBtICU+JSAKICBkaXN0aW5jdChzdGF0ZSkgJT4lCiAgcHJpbnQobiA9IDFlMykKYGBgCiMjIyMKCkxvb2tzIGxpa2UgIkRpc3RyaWN0IG9mIENvbHVtYmlhIiBpcyBiZWluZyBpbmNsdWRlZCBhcyBhIHN0YXRlLiBXZSBjYW4gc2VlIHRoYXQgaW5kZWVkIEFsYXNrYSBhbmQgSGF3YWlpIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGRhdGEuCgpIZXJlIGlzIGFub3RoZXIgbWV0aG9kIG9mIGxvb2tpbmcgYXQgdGhlIGRhdGEgdXNpbmcgdGhlIGBkZlN1bW1hcnkoKWAgZnVuY3Rpb24gb2YgdGhlIGBzdW1tYXJ5dG9vbHNgcGFja2FnZS4gV2UgbmVlZCB0byBjb3B5IGFuZCBwYXN0ZSB0aGUgb3V0cHV0IGludG8gdGhlIHJtYXJrZG93bi4KCmBgYHtyLCBldmFsID0gRkFMU0V9CmRmU3VtbWFyeShwbSwgcGxhaW4uYXNjaWkgPSBGQUxTRSwgc3R5bGUgPSAiZ3JpZCIsIAogICAgICAgICAgZ3JhcGgubWFnbmlmID0gMC40NSwgIHRtcC5pbWcuZGlyID0gInRtcCIpCmBgYAoKKipEaW1lbnNpb25zOioqIDg3NiB4IDUwICAKKipEdXBsaWNhdGVzOioqIDAgIAoKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCBObyB8IFZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgfCBTdGF0cyAvIFZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRnJlcXMgKCUgb2YgVmFsaWQpICB8IEdyYXBoICAgICAgICAgICAgICAgfCBWYWxpZCAgfCBNaXNzaW5nIHwKKz09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09Kz09PT09PT09PSsKfCAxICB8IGlkXCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxXC4gMTAwMy4wMDFcICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICFbXSh0bXAvZHMwMTAxLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtmYWN0b3JdICAgICAgICAgICAgICAgICAgICAgfCAyXC4gMTAyNy4wMDAxXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzXC4gMTAzMy4xMDAyXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0XC4gMTA0OS4xMDAzXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1XC4gMTA1NS4wMDFcICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2XC4gMTA2OS4wMDAzXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3XC4gMTA3My4wMDIzXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4XC4gMTA3My4xMDA1XCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5XC4gMTA3My4xMDA5XCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMFwuIDEwNzMuMTAxXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbIDg2NiBvdGhlcnMgXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgODY2ICg5OC45JSkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyICB8IHZhbHVlXCAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxMC44ICgyLjYpXCAgICAgICAgICAgICAgICAgIHwgODc1IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTAyLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzIDwgMTEuMiA8IDIzLjJcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDMuMSAoMC4yKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzICB8IGZpcHNcICAgICAgICAgICAgICAgICAgICAgICAgfCAxXC4gMTAwM1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICFbXSh0bXAvZHMwMTAzLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtmYWN0b3JdICAgICAgICAgICAgICAgICAgICAgfCAyXC4gMTAyN1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzXC4gMTAzM1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0XC4gMTA0OVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1XC4gMTA1NVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2XC4gMTA2OVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3XC4gMTA3M1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOCAoIDAuOSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4XC4gMTA4OVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5XC4gMTA5N1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAoIDAuMiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMFwuIDExMDFcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbIDU1OSBvdGhlcnMgXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgODU4ICg5OC4wJSkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0ICB8IGxhdFwgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAzOC41ICg0LjYpXCAgICAgICAgICAgICAgICAgIHwgODc2IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTA0LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNS41IDwgMzkuMyA8IDQ4LjRcICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDYuNiAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA1ICB8IGxvblwgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAtOTEuNyAoMTUpXCAgICAgICAgICAgICAgICAgIHwgODc2IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTA1LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAtMTI0LjIgPCAtODcuNSA8IC02OFwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE4LjUgKC0wLjIpICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA2ICB8IHN0YXRlXCAgICAgICAgICAgICAgICAgICAgICAgfCAxXC4gQ2FsaWZvcm5pYVwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgODUgKCA5LjclKVwgICAgICAgICB8ICFbXSh0bXAvZHMwMTA2LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtjaGFyYWN0ZXJdICAgICAgICAgICAgICAgICAgfCAyXC4gT2hpb1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDQgKCA1LjAlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzXC4gSWxsaW5vaXNcICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzggKCA0LjMlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0XC4gSW5kaWFuYVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzYgKCA0LjElKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1XC4gTm9ydGggQ2Fyb2xpbmFcICAgICAgICAgICAgICAgICAgICAgIHwgMzUgKCA0LjAlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2XC4gUGVubnN5bHZhbmlhXCAgICAgICAgICAgICAgICAgICAgICAgIHwgMzIgKCAzLjclKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3XC4gTWljaGlnYW5cICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzAgKCAzLjQlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4XC4gRmxvcmlkYVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjkgKCAzLjMlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5XC4gR2VvcmdpYVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjggKCAzLjIlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMFwuIFRleGFzXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjcgKCAzLjElKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbIDM5IG90aGVycyBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDkyICg1Ni4yJSkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA3ICB8IGNvdW50eVwgICAgICAgICAgICAgICAgICAgICAgfCAxXC4gSmVmZmVyc29uXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTggKCAyLjElKVwgICAgICAgICB8ICFbXSh0bXAvZHMwMTA3LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtjaGFyYWN0ZXJdICAgICAgICAgICAgICAgICAgfCAyXC4gQ29va1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIgKCAxLjQlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzXC4gSGFtaWx0b25cICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEgKCAxLjMlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0XC4gTGFrZVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEgKCAxLjMlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1XC4gTG9zIEFuZ2VsZXNcICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgKCAxLjElKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2XC4gV2F5bmVcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgKCAxLjElKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3XC4gV2FzaGluZ3RvblwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOSAoIDEuMCUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4XC4gQ3V5YWhvZ2FcICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAoIDAuOCUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5XC4gSmFja3NvblwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAoIDAuOCUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMFwuIE1hZGlzb25cICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAoIDAuOCUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbIDQ2MSBvdGhlcnMgXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNzc0ICg4OC40JSkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA4ICB8IGNpdHlcICAgICAgICAgICAgICAgICAgICAgICAgfCAxXC4gTm90IGluIGEgY2l0eVwgICAgICAgICAgICAgICAgICAgICAgIHwgMTAzICgxMS44JSlcICAgICAgICB8ICFbXSh0bXAvZHMwMTA4LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtjaGFyYWN0ZXJdICAgICAgICAgICAgICAgICAgfCAyXC4gTmV3IFlvcmtcICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOSAoIDEuMCUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzXC4gQ2xldmVsYW5kXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNiAoIDAuNyUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0XC4gQmFsdGltb3JlXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1XC4gQ2hpY2Fnb1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2XC4gRGV0cm9pdFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3XC4gTWlsd2F1a2VlXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4XC4gTmV3IEhhdmVuXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5XC4gUGhpbGFkZWxwaGlhXCAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMFwuIFNwcmluZ2ZpZWxkXCAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbIDU5NyBvdGhlcnMgXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNzIzICg4Mi41JSkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA5ICB8IENNQVFcICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA4LjQgKDMpXCAgICAgICAgICAgICAgICAgICAgIHwgNjAxIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTA5LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLjYgPCA4LjYgPCAyMy4xXCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDMuNyAoMC40KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxMCB8IHpjdGFcICAgICAgICAgICAgICAgICAgICAgICAgfCAxXC4gMTAyMlwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICFbXSh0bXAvZHMwMTEwLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtmYWN0b3JdICAgICAgICAgICAgICAgICAgICAgfCAyXC4gMTEwM1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAoIDAuMiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzXC4gMTIwMVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0XC4gMTYwOFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAoIDAuMiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1XC4gMTgzMlwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2XC4gMTg0MFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3XC4gMTg2M1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4XC4gMTkwNFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5XC4gMjExM1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMFwuIDIxMTlcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbIDgzMiBvdGhlcnMgXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgODY0ICg5OC42JSkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxMSB8IHpjdGFfYXJlYVwgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxODMxNzM0ODEuOSAoNTQyNTk4ODc4LjUpXCAgIHwgODQyIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTExLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNTQ1OSA8IDM3NjUzNTYwLjUgPCA4MTY0ODIwNjI1XCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE0NTgzNjkwNi41ICgzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxMiB8IHpjdGFfcG9wXCAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAyNDIyNy42ICgxNzc3Mi4yKVwgICAgICAgICAgIHwgODM3IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTEyLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMjIwMTQgPCA5NTM5N1wgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDI1MjA3LjggKDAuNykgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxMyB8IGltcF9hNTAwXCAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAyNC43ICgxOS4zKVwgICAgICAgICAgICAgICAgIHwgODE2IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTEzLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMjUuMSA8IDY5LjZcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDM2LjUgKDAuOCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxNCB8IGltcF9hMTAwMFwgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAyNC4zICgxOClcICAgICAgICAgICAgICAgICAgIHwgODYwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTE0LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMjQuNSA8IDY3LjVcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDMzLjMgKDAuNykgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxNSB8IGltcF9hNTAwMFwgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxOS45ICgxNC43KVwgICAgICAgICAgICAgICAgIHwgODcwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTE1LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwLjEgPCAxOS4xIDwgNzQuNlwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIzLjMgKDAuNykgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxNiB8IGltcF9hMTAwMDBcICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxNS44ICgxMy44KVwgICAgICAgICAgICAgICAgIHwgODcwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTE2LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwLjEgPCAxMi40IDwgNzIuMVwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE5LjYgKDAuOSkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxNyB8IGltcF9hMTUwMDBcICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxMy40ICgxMy4xKVwgICAgICAgICAgICAgICAgIHwgODcwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTE3LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwLjEgPCA5LjcgPCA3MS4xXCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE3LjMgKDEpICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxOCB8IGNvdW50eV9hcmVhXCAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAzNzY4NzAxOTkyLjEgKDYyMTI4Mjk1NTMuNilcIHwgNTY0IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTE4LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMzcwMzUxMiA8IDE2OTA4MjY1NjYuNSA8IDUxOTQ3MjI5NTA5XCAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE3NjE2NTU5MTEuNSAoMS42KSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxOSB8IGNvdW50eV9wb3BcICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA2ODcyOTguNCAoMTI5MzQ4OC43KVwgICAgICAgIHwgNTY0IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTE5LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ODMgPCAyODA3MzAuNSA8IDk4MTg2MDVcICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDY0MjIxMSAoMS45KSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyMCB8IGxvZ19kaXN0X3RvX3ByaXNlY1wgICAgICAgICAgfCBNZWFuIChzZCkgOiA2LjIgKDEuNClcICAgICAgICAgICAgICAgICAgIHwgODcwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTIwLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAtMS41IDwgNi40IDwgMTAuNVwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEuNyAoMC4yKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyMSB8IGxvZ19wcmlfbGVuZ3RoXzUwMDBcICAgICAgICAgfCBNZWFuIChzZCkgOiA5LjggKDEuMSlcICAgICAgICAgICAgICAgICAgIHwgNTg2IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTIxLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LjUgPCAxMC4xIDwgMTJcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIuMiAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyMiB8IGxvZ19wcmlfbGVuZ3RoXzEwMDAwXCAgICAgICAgfCBNZWFuIChzZCkgOiAxMC45ICgxLjEpXCAgICAgICAgICAgICAgICAgIHwgNjg3IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTIyLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LjIgPCAxMS4yIDwgMTNcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIgKDAuMSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyMyB8IGxvZ19wcmlfbGVuZ3RoXzE1MDAwXCAgICAgICAgfCBNZWFuIChzZCkgOiAxMS41ICgxLjEpXCAgICAgICAgICAgICAgICAgIHwgNzI2IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTIzLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LjYgPCAxMS43IDwgMTMuNlwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEuNSAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyNCB8IGxvZ19wcmlfbGVuZ3RoXzI1MDAwXCAgICAgICAgfCBNZWFuIChzZCkgOiAxMi4yICgxLjEpXCAgICAgICAgICAgICAgICAgIHwgNzg3IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTI0LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4xIDwgMTIuNSA8IDE0LjRcICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEuNCAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyNSB8IGxvZ19wcmlzZWNfbGVuZ3RoXzUwMFwgICAgICAgfCBNZWFuIChzZCkgOiA3ICgxKVwgICAgICAgICAgICAgICAgICAgICAgIHwgMzgyIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTI1LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LjIgPCA2LjIgPCA5LjRcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEuNiAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyNiB8IGxvZ19wcmlzZWNfbGVuZ3RoXzEwMDBcICAgICAgfCBNZWFuIChzZCkgOiA4LjYgKDAuOClcICAgICAgICAgICAgICAgICAgIHwgNTkxIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTI2LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LjYgPCA4LjcgPCAxMC41XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEuNiAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyNyB8IGxvZ19wcmlzZWNfbGVuZ3RoXzUwMDBcICAgICAgfCBNZWFuIChzZCkgOiAxMS4zICgwLjgpXCAgICAgICAgICAgICAgICAgIHwgODUyIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTI3LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LjUgPCAxMS40IDwgMTIuOFwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDAuOSAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyOCB8IGxvZ19wcmlzZWNfbGVuZ3RoXzEwMDAwXCAgICAgfCBNZWFuIChzZCkgOiAxMi40ICgwLjcpXCAgICAgICAgICAgICAgICAgIHwgODY3IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTI4LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LjIgPCAxMi41IDwgMTMuOFwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEgKDAuMSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyOSB8IGxvZ19wcmlzZWNfbGVuZ3RoXzE1MDAwXCAgICAgfCBNZWFuIChzZCkgOiAxMyAoMC43KVwgICAgICAgICAgICAgICAgICAgIHwgODY5IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTI5LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LjYgPCAxMy4xIDwgMTQuNFwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEgKDAuMSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzMCB8IGxvZ19wcmlzZWNfbGVuZ3RoXzI1MDAwXCAgICAgfCBNZWFuIChzZCkgOiAxMy44ICgwLjcpXCAgICAgICAgICAgICAgICAgIHwgODcwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTMwLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4xIDwgMTMuOSA8IDE1LjJcICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEgKDAuMSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzMSB8IGxvZ19uZWlfMjAwOF9wbTI1X3N1bV8xMDAwMFwgfCBNZWFuIChzZCkgOiA0ICgyLjQpXCAgICAgICAgICAgICAgICAgICAgIHwgODI4IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTMxLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNC4zIDwgOS4xXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDMuNSAoMC42KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzMiB8IGxvZ19uZWlfMjAwOF9wbTI1X3N1bV8xNTAwMFwgfCBNZWFuIChzZCkgOiA0LjcgKDIuMilcICAgICAgICAgICAgICAgICAgIHwgODU1IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTMyLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNSA8IDkuNFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIuOSAoMC41KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzMyB8IGxvZ19uZWlfMjAwOF9wbTI1X3N1bV8yNTAwMFwgfCBNZWFuIChzZCkgOiA1LjcgKDIuMSlcICAgICAgICAgICAgICAgICAgIHwgODYwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTMzLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNS45IDwgOS43XCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIuNiAoMC40KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzNCB8IGxvZ19uZWlfMjAwOF9wbTEwX3N1bV8xMDAwMFwgfCBNZWFuIChzZCkgOiA0LjMgKDIuMylcICAgICAgICAgICAgICAgICAgIHwgODI5IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTM0LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNC42IDwgOS4zXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDMuNCAoMC41KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzNSB8IGxvZ19uZWlfMjAwOF9wbTEwX3N1bV8xNTAwMFwgfCBNZWFuIChzZCkgOiA1LjEgKDIuMilcICAgICAgICAgICAgICAgICAgIHwgODU1IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTM1LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNS40IDwgOS43XCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIuOCAoMC40KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzNiB8IGxvZ19uZWlfMjAwOF9wbTEwX3N1bV8yNTAwMFwgfCBNZWFuIChzZCkgOiA2LjEgKDIpXCAgICAgICAgICAgICAgICAgICAgIHwgODYwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTM2LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNi40IDwgOS45XCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIuNCAoMC4zKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzNyB8IHBvcGRlbnNfY291bnR5XCAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA1NTEuOCAoMTcxMS41KVwgICAgICAgICAgICAgIHwgNTY0IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTM3LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwLjMgPCAxNTYuNyA8IDI2ODIxLjlcICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDQ3MCAoMy4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzOCB8IHBvcGRlbnNfemN0YVwgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxMjc5LjcgKDI3NTcuNSlcICAgICAgICAgICAgIHwgODQwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTM4LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNjEwLjMgPCAzMDQxOC44XCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEyODEuNCAoMi4yKSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzOSB8IG5vaHNcICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA3ICg3LjIpXCAgICAgICAgICAgICAgICAgICAgIHwgMjE1IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTM5LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNS4xIDwgMTAwXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDYuMSAoMSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0MCB8IHNvbWVoc1wgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxMC4yICg2LjIpXCAgICAgICAgICAgICAgICAgIHwgMjMwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQwLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgOS40IDwgNzIuMlwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDggKDAuNikgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0MSB8IGhzXCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAzMC4zICgxMS40KVwgICAgICAgICAgICAgICAgIHwgMzQ3IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQxLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMzAuOCA8IDEwMFwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEyLjMgKDAuNCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0MiB8IHNvbWVjb2xsZWdlXCAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAyMS42ICg4LjYpXCAgICAgICAgICAgICAgICAgIHwgMjQwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQyLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMjEuMyA8IDEwMFwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDcuMiAoMC40KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0MyB8IGFzc29jaWF0ZVwgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA3LjEgKDQpXCAgICAgICAgICAgICAgICAgICAgIHwgMTU3IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQzLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNy4xIDwgNzEuNFwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDMuOSAoMC42KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0NCB8IGJhY2hlbG9yXCAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxNC45ICg5LjcpXCAgICAgICAgICAgICAgICAgIHwgMzAxIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQ0LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMTIuOSA8IDEwMFwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEwLjQgKDAuNykgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0NSB8IGdyYWRcICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA4LjkgKDguNilcICAgICAgICAgICAgICAgICAgIHwgMjQ1IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQ1LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNi43IDwgMTAwXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDcuMSAoMSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0NiB8IHBvdlwgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxNSAoMTEuMylcICAgICAgICAgICAgICAgICAgIHwgMzQ1IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQ2LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMTIuMSA8IDY1LjlcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE0LjcgKDAuOCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0NyB8IGhzX29ybGVzc1wgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA0Ny41ICgxNi44KVwgICAgICAgICAgICAgICAgIHwgNDY0IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQ3LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNDguNyA8IDEwMFwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIxLjIgKDAuNCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0OCB8IHVyYzIwMTNcICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAyLjkgKDEuNSlcICAgICAgICAgICAgICAgICAgIHwgMSA6IDIwMyAoMjMuMiUpXCAgICB8ICFbXSh0bXAvZHMwMTQ4LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgMiA6IDE2MyAoMTguNiUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxIDwgMyA8IDZcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyA6IDIyOCAoMjYuMCUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIgKDAuNSkgICAgICAgICAgICAgICAgICAgICAgIHwgNCA6IDEyMyAoMTQuMCUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSA6IDEwMSAoMTEuNSUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNiA6ICA1OCAoIDYuNiUpICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0OSB8IHVyYzIwMDZcICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAzICgxLjUpXCAgICAgICAgICAgICAgICAgICAgIHwgMSA6IDE5NSAoMjIuMyUpXCAgICB8ICFbXSh0bXAvZHMwMTQ5LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgMiA6IDE2MiAoMTguNSUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxIDwgMyA8IDZcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyA6IDIyMSAoMjUuMiUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIgKDAuNSkgICAgICAgICAgICAgICAgICAgICAgIHwgNCA6IDEyNyAoMTQuNSUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSA6IDExNSAoMTMuMSUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNiA6ICA1NiAoIDYuNCUpICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA1MCB8IGFvZFwgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA0My43ICgxOS42KVwgICAgICAgICAgICAgICAgIHwgNTgxIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTUwLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1IDwgNDAuMiA8IDE0M1wgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE4ICgwLjQpICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKCgpXZSBjYW4gc2VlIHRoYXQgZm9yIG1hbnkgdmFyaWFibGVzIHRoZXJlIGFyZSBtYW55IGxvdyB2YWx1ZXMgYXMgdGhlIGRpc3RyaWJ1dGlvbiBzaG93cyB0d28gcGVha3MsIG9uZSBuZWFyIHplcm8gYW5kIGFub3RoZXIgd2l0aCBhIGhpZ2hlciB2YWx1ZS4gVGhpcyBpcyB0cnVlIGZvciB0aGUgaW1wIHZhcmlhYmxlcyAobWVhc3VyZXMgb2YgZGV2ZWxvcG1lbnQpLCB0aGUgbmVpIHZhcmlhYmxlcyAobWVhc3VyZXMgb2YgZW1pc3Npb24gc291cmNlcykgYW5kIHRoZSByb2FkIGRlbnNpdHkgdmFyaWFibGVzLiBXZSBjYW4gYWxzbyBzZWUgdGhhdCB0aGUgcmFuZ2Ugb2Ygc29tZSBvZiB0aGUgdmFyaWFibGVzIGlzIHZlcnkgbGFyZ2UsIGluIHBhcnRpY3VsYXIgdGhlIGFyZWEgYW5kIHBvcHVsYXRpb24gcmVsYXRlZCB2YXJpYWJsZXMuCgoKSW4gcHJlZGljdGlvbiBhbmFseXNlcywgaXQgaXMgYWxzbyB1c2VmdWwgdG8gZXZhbHVhdGUgaWYgYW55IG9mIHRoZSB2YXJpYWJsZXMgYXJlIGNvcnJlbGF0ZWQuCgpJbnR1aXRpdmVseSB3ZSBjYW4gZXhwZWN0IHNvbWUgb2Ygb3VyIHZhcmlhYmxlcyB0byBiZSBjb3JyZWxhdGVkLgoKV2UgZXhwZWN0IHRoZSBkZXZlbG9wbWVudCB2YXJpYWJsZXMgKGltcCkgdG8gYmUgY29ycmVsYXRlZCB3aXRoIGVhY2ggb3RoZXIsIHdlIGV4cGVjdCB0aGUgcm9hZCBkZW5zaXR5IHZhcmlhYmxlcyB0byBiZSBjb3JyZWxhdGVkIHdpdGggZWFjaCBvdGhlciwgd2UgZXhwZWN0IHRoZSBlbWlzc2lvbiB2YXJpYWJsZXMgdG8gYmUgY29ycmVsYXRlZCB3aXRoIGVhY2ggb3RoZXIsIGFuZCB3ZSBhbHNvIGV4cGVjdCB0aGVzZSB2YXJpYWJsZXMgdG8gYmUgY29ycmVsYXRlZCB3aXRoIG9uZSBhbm90aGVyIGFuZCBsaWtlbHkgY29ycmVsYXRlZCB3aXRoIHBvcHVsYXRpb24gZGVuc2l0eS4gV2UgY2FuIGdldCBhIG5pY2UgdmlzdWFsaXphdGlvbiBvZiBjb3JyZWxhdGlvbiB1c2luZyB0aGUgYGdnY29ycigpYCBmdW5jdGlvbiBhbmQgdGhlIGBnZ3BhaXJzKClgIGZ1bmN0aW9uIG9mIHRoZSBgR0dhbGx5YCBwYWNrYWdlLiB0byBzZWxlY3Qgb3VyIHZhcmlhYmxlcyBvZiBpbnRlcmVzdCB3ZSBjYW4gdXNlIHRoZSBgc2VsZWN0KClgIGZ1bmN0aW9uIHdpdGggdGhlIGBjb250YWlucygpYCBmdW5jdGlvbiBvZiB0aGUgYHRpZHlyYCBwYWNrYWdlLiAKCkZpcnN0IGxldCdzIGxvb2sgYXQgdGhlIGltcC9kZXZlbG9wbWVudCB2YXJpYWJsZXMuIApgYGB7ciwgb3V0LndpZHRoID0gIjQwMHB4In0Kc2VsZWN0KHBtLCBjb250YWlucygiaW1wIikpICU+JQogIGdnY29ycihwYWxldHRlID0gIlJkQnUiLCBsYWJlbCA9IFRSVUUpCgpzZWxlY3QocG0sIGNvbnRhaW5zKCJpbXAiKSkgJT4lCiAgZ2dwYWlycygpCiAgCmBgYAoKSW5kZWVkLCB3ZSBjYW4gc2VlIHRoYXQgaW1wX2ExMDAwIGFuZCBpbXBfYTUwMCBhcmUgcGVyZmVjdGx5IGNvcnJlbGF0ZWQsIGFzIHdlbGwgYXMgaW1wX2ExMDAwMCwgaW1wX2ExNTAwMC4KCgpOb3cgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJvYWQgZGVuc2l0eSBkYXRhOgoKYGBge3IsIGZpZy53ZWlnaHQ9MTJ9CnNlbGVjdChwbSwgY29udGFpbnMoInByaSIpKSAlPiUKICBnZ2NvcnIocGFsZXR0ZSA9ICJSZEJ1IiwgIGhqdXN0ID0gLjg1LCBzaXplID0gMywKICAgICAgIGxheW91dC5leHA9MiwgbGFiZWwgPSBUUlVFKQoKc2VsZWN0KHBtLCBjb250YWlucygicHJpIikpICU+JQogIGdncGFpcnMoKQpgYGAKCldlIGNhbiBzZWUgdGhhdCB3aGlsZSBzb21lIG9mIHRoZSByb2FkIGRlbnNpdHkgdmFyaWFibGVzIGFyZSBoaWdobHkgY29ycmVsYXRlZCB3aXRoIG9uZSBhbm90aGVyIChvciBhbnRpLWNvcnJlbGF0ZWQpLCB0aGVyZSBhcnIgc29tZSB2YXJpYWJsZXMgdGhhdCBhcmUgbGVzcyBjb3JyZWxhdGVkIHdpdGggb25lIGFub3RoZXIuCgpGaW5hbGx5IGxldCdzIGxvb2sgYXQgdGhlIGVtaXNzaW9uIHZhcmlhYmxlcy4KCmBgYHtyfQpzZWxlY3QocG0sIGNvbnRhaW5zKCJuZWkiKSkgJT4lCiAgZ2djb3JyKHBhbGV0dGUgPSAiUmRCdSIsICBoanVzdCA9IC44NSwgc2l6ZSA9IDMsCiAgICAgICBsYXlvdXQuZXhwPTIsIGxhYmVsID0gVFJVRSkKCnNlbGVjdChwbSwgY29udGFpbnMoIm5laSIpKSAlPiUKICBnZ3BhaXJzKCkKYGBgCgpXZSB3b3VsZCBhbHNvIGV4cGVjdCB0aGUgcG9wdWxhdGlvbiBkZW5zaXR5IGRhdGEgbWlnaHQgY29ycmVsYXRlIHdpdGggc29tZSBvZiB0aGVzZSB2YXJpYWJsZXMuIExldCdzIHRha2UgYSBsb29rLgoKYGBge3J9CnBtICU+JQpzZWxlY3QobG9nX25laV8yMDA4X3BtMjVfc3VtXzEwMDAwLCBwb3BkZW5zX2NvdW50eSwgbG9nX3ByaV9sZW5ndGhfMTAwMDAsIGltcF9hMTAwMDApICU+JQogIGdnY29ycihwYWxldHRlID0gIlJkQnUiLCAgaGp1c3QgPSAuODUsIHNpemUgPSAzLAogICAgICAgbGF5b3V0LmV4cD0yLCBsYWJlbCA9IFRSVUUpCgpwbSAlPiUKc2VsZWN0KGxvZ19uZWlfMjAwOF9wbTI1X3N1bV8xMDAwMCwgcG9wZGVuc19jb3VudHksIGxvZ19wcmlfbGVuZ3RoXzEwMDAwLCBpbXBfYTEwMDAwKSAlPiUKICBnZ3BhaXJzKCkKYGBgCgoKSW50ZXJlc3RpbmcsIHNvIHRoZXNlIHZhcmlhYmxlcyBkb24ndCBhcHBlYXIgdG8gYmUgaGlnaGx5IGNvcnJlbGF0ZWQsIHRoZXJlZm9yZSB3ZSBtaWdodCBuZWVkIHZhcmlhYmxlcyBmcm9tIGVhY2ggb2YgdGhlIGNhdGVnb3JpZXMgdG8gcHJlZGljdCBvdXIgbW9uaXRvciBQTX4yLjV+IHBvbGx1dGlvbiB2YWx1ZXMuCgpXZSBzZWVtIHRvIGhhdmUgc29tZSBwcmV0dHkgZXh0cmVtZSBwb3B1bGF0aW9uIHZhbHVlcyB0aG91Z2gsIHNvIGxldCdzIHNlZSB3aGF0IGhhcHBlbnMgd2hlbiB3ZSB0YWtlIHRoZSBsb2cgdmFsdWUuCgpgYGB7cn0KcG0gJT4lCiAgbXV0YXRlKGxvZ19wb3BkZW5zX2NvdW50eT0gbG9nKHBvcGRlbnNfY291bnR5KSkgJT4lCnNlbGVjdChsb2dfbmVpXzIwMDhfcG0yNV9zdW1fMTAwMDAsIGxvZ19wb3BkZW5zX2NvdW50eSwgbG9nX3ByaV9sZW5ndGhfMTAwMDAsIGltcF9hMTAwMDApICU+JQogIGdnY29ycihwYWxldHRlID0gIlJkQnUiLCAgaGp1c3QgPSAuODUsIHNpemUgPSAzLAogICAgICAgbGF5b3V0LmV4cD0yLCBsYWJlbCA9IFRSVUUpCgpwbSAlPiUKICBtdXRhdGUobG9nX3BvcGRlbnNfY291bnR5PSBsb2cocG9wZGVuc19jb3VudHkpKSAlPiUKc2VsZWN0KGxvZ19uZWlfMjAwOF9wbTI1X3N1bV8xMDAwMCwgbG9nX3BvcGRlbnNfY291bnR5LCBsb2dfcHJpX2xlbmd0aF8xMDAwMCwgaW1wX2ExMDAwMCkgJT4lCiAgZ2dwYWlycygpCmBgYAoKSW5kZWVkIHRoaXMgaW5jcmVhc2VkIHRoZSBjb3JyZWxhdGlvbiwgYnV0IHZhcmlhYmxlcyBmcm9tIGVhY2ggb2YgdGhlc2UgY2F0ZWdvcmllcyBtYXkgc3RpbGwgcHJvdmUgdG8gYmUgdXNlZnVsIGZvciBwcmVkaWN0aW9uLgoKTm93IHRoYXQgd2UgaGF2ZSBhIHNlbnNlIG9mIHdoYXQgb3VyIGRhdGEgaXMgbGlrZSB3ZSBjYW4gZ2V0IHN0YXJ0ZWQuCgojIyBEYXRhIEFuYWx5c2lzCgojIyMgVGhlIHRpZHltb2RlbHMgZWNvc3lzdGVtCgpUbyBwZXJmb3JtIG91ciBhbmFseXNpcyB3ZSB3aWxsIGJlIHVzaW5nIHRoZSBgdGlkeW1vZGVsc2Agc3VpdGUgb2YgcGFja2FnZXMuIFlvdSBtYXkgYmUgZmFtaWxpYXIgd2l0aCB0aGUgb2xkZXIgcGFja2FnZXMgYGNhcmV0YCBvciBgbWxyYCB3aGljaCBhcmUgYWxzbyBmb3IgbWFjaGluZSBsZWFybmluZyBhbmQgbW9kZWxpbmcgYnV0IGFyZSBub3QgYSBwYXJ0IG9mIHRoZSBgdGlkeXZlcnNlYC4gW01heCBLdWhuXShodHRwczovL3Jlc291cmNlcy5yc3R1ZGlvLmNvbS9hdXRob3JzL21heC1rdWhuKXt0YXJnZXQ9Il9ibGFuayJ9IGRlc2NyaWJlcyBgdGlkeW1vZGxlc2AgbGlrZSB0aGlzOgoKPiAiT3RoZXIgcGFja2FnZXMsIHN1Y2ggYXMgY2FyZXQgYW5kIG1sciwgaGVscCB0byBzb2x2ZSB0aGUgUiBtb2RlbCBBUEkgaXNzdWUuIFRoZXNlIHBhY2thZ2VzIGRvIGEgbG90IG9mIG90aGVyIHRoaW5ncyB0b286IHByZXByb2Nlc3NpbmcsIG1vZGVsIHR1bmluZywgcmVzYW1wbGluZywgZmVhdHVyZSBzZWxlY3Rpb24sIGVuc2VtYmxpbmcsIGFuZCBzbyBvbi4gSW4gdGhlIHRpZHl2ZXJzZSwgd2Ugc3RyaXZlIHRvIG1ha2Ugb3VyIHBhY2thZ2VzIG1vZHVsYXIgYW5kIHBhcnNuaXAgaXMgZGVzaWduZWQgb25seSB0byBzb2x2ZSB0aGUgaW50ZXJmYWNlIGlzc3VlLiBJdCBpcyBub3QgZGVzaWduZWQgdG8gYmUgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBjYXJldC4KVGhlIHRpZHltb2RlbHMgcGFja2FnZSBjb2xsZWN0aW9uLCB3aGljaCBpbmNsdWRlcyBwYXJzbmlwLCBoYXMgb3RoZXIgcGFja2FnZXMgZm9yIG1hbnkgb2YgdGhlc2UgdGFza3MsIGFuZCB0aGV5IGFyZSBkZXNpZ25lZCB0byB3b3JrIHRvZ2V0aGVyLiBXZSBhcmUgd29ya2luZyB0b3dhcmRzIGhpZ2hlci1sZXZlbCBBUElzIHRoYXQgY2FuIHJlcGxpY2F0ZSBhbmQgZXh0ZW5kIHdoYXQgdGhlIGN1cnJlbnQgbW9kZWwgcGFja2FnZXMgY2FuIGRvLiIKCgojIyMgVGhlIG1ham9yIGJlbmVmaXRzIG9mIHRpZHltb2RlbHMKMSkgc3RhbmRhcmRpemVkIHdvcmtmbG93L2Zvcm1hdC9ub3RhdGlvbiBhY3Jvc3MgZGlmZmVyZW50IHR5cGVzIG9mIGFsZ29yaXRobXMKMikgY2FuIGVhc2lseSBtb2RpZnkgcHJlcHJvY2Vzc2luZyBhbmQgcGFyYW1ldGVyIGFuZCBoeXBlci1wYXJhbWV0ZXIgdHVuaW5nIG1ha2luZyBvcHRpbWl6YXRpb24gZWFzeQoKCiMjIyBBbiBpbGx1c3RyYXRpb24gb2YgdGhlIG92ZXJhbGwgdGlkeW1vZGVscyBlY29zeXN0ZW0KCmBgYHtyLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9IjQwMHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwidGlkeW1vZGVsc19lY29zeXN0ZW0ucG5nIikpCmBgYAoKCgojIyMgU3BsaXR0aW5nIHRoZSBEYXRhCgpUaGUgZmlyc3Qgc3RlcCBhZnRlciBkYXRhIGV4cGxvcmF0aW9uIGluIG1hY2hpbmUgbGVhcm5pbmcgYW5hbHlzaXMgaXMgdG8gW3NwbGl0IHRoZSBkYXRhXShodHRwczovL3Rvd2FyZHNkYXRhc2NpZW5jZS5jb20vdHJhaW4tdmFsaWRhdGlvbi1hbmQtdGVzdC1zZXRzLTcyY2I0MGNiYTllNyl7dGFyZ2V0PSJfYmxhbmsifSBpbnRvICoqdHJhaW5pbmcqKiBhbmQgKip0ZXN0aW5nKiogZGF0YXNldHMuIAoKVGhlIHRyYWluaW5nIGRhdGFzZXQgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIGFuZCB0dW5lIG91ciBtb2RlbC4gVGhpcyBpcyB0aGUgZGF0YSB0aGF0IHRoZSBtb2RlbCAibGVhcm5zIm9uLgoKVGhlIHRlc3Rpbmcgc2V0IHdpbGwgYmUgdXNlZCB0byBldmFsdWF0ZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygb3VyIG1vZGVsIGluIGEgbW9yZSBnZW5lcmFsaXphYmxlIHdheS4gV2hhdCBkbyB3ZSBtZWFuIGJ5ICJnZW5lcmFsaXphYmxlIi4KClJlbWVtYmVyIHRoYXQgb3VyIG1haW4gZ29hbCBpcyB0byB1c2Ugb3VyIG1vZGVsIHRvIGJlIGFibGUgdG8gcHJlZGljdCBhaXIgcG9sbHV0aW9uIGxldmVscyBpbiBhcmVhcyB3aGVyZSB0aGVyZSBhcmUgbm8gZ3JhdmltZXRyaWMgbW9uaXRvcnMuIFRoZXJlZm9yZSwgaWYgb3VyIG1vZGVsIGlzIHN1cGVyIGdvb2QgYXQgcHJlZGljdGluZyBhaXIgcG9sbHV0aW9uIHdpdGggdGhlIGRhdGEgdGhhdCB3ZSB1c2UgdG8gYnVpbGQgaXQsIGl0IG1pZ2h0IG5vdCBkbyB0aGUgYmVzdCBqb2IgZm9yIHRoZSBhcmVhcyB3aGVyZSB0aGVyZSBhcmUgZmV3IHRvIG5vIG1vbml0b3JzLiBUaGlzIHdvdWxkIGNhdXNlIHVzIHRvIGhhdmUgcmVhbGx5IGdvb2QgcHJlZGljdGlvbiBhY2N1cmFjeSBhbmQgd2UgbWlnaHQgYXNzdW1lIHRoYXQgd2Ugd2VyZSBnb2luZyB0byBkbyBhIGdvb2Qgam9iIGVzdGltYXRpbmcgYWlyIHBvbGx1dGlvbiBhbnkgdGltZSB3ZSB1c2Ugb3VyIG1vZGVsLCBidXQgaW4gZmFjdCB0aGlzIHdvdWxkIGxpa2VseSBub3QgYmUgdGhlIGNhc2UuIFRoaXMgc2l0dWF0aW9uIGlzIHdoYXQgd2UgY2FsbCAqKltvdmVyZml0dGluZ10oaHR0cHM6Ly90b3dhcmRzZGF0YXNjaWVuY2UuY29tL3RyYWluLXRlc3Qtc3BsaXQtYW5kLWNyb3NzLXZhbGlkYXRpb24taW4tcHl0aG9uLTgwYjYxYmVjYTRiNil7dGFyZ2V0PSJfYmxhbmsifSAqKi4KCk92ZXJmaXR0aW5nIGhhcHBlbnMgd2hlbiB3ZSBlbmQgdXAgbW9kZWxpbmcgbm90IG9ubHkgdGhlIG1ham9yIHJlbGF0aW9uc2hpcHMgaW4gb3VyIGRhdGEgYnV0IGFsc28gdGhlIG5vaXNlIHdpdGhpbiBvdXIgZGF0YS4gCgoKYGBge3J9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJodHRwczovL21pcm8ubWVkaXVtLmNvbS9tYXgvMTExMC8xKnRCRXJYWVZ2VHcyalNVWUs3dGhVMkEucG5nIikKYGBgCgojIyMjIyBbW3NvdXJjZV0oaHR0cHM6Ly9taXJvLm1lZGl1bS5jb20vbWF4LzExMTAvMSp0QkVyWFlWdlR3MmpTVVlLN3RoVTJBLnBuZyldCgpJZiB3ZSBnZXQgZmFpcmx5IGdvb2QgcHJlZGljdGlvbiB3aXRoIG91ciB0ZXN0aW5nIHNldCB0aGVuIHdlIHdpbGwga25vdyB0aGF0IG91ciBtb2RlbCBjYW4gYmUgYXBwbGllZCB0byBvdGhlciBkYXRhIGFuZCB3aWxsIHBlcmZvcm0gZmFpcmx5IHdlbGwuIFdlIHdpbGwgZGlzY3VzcyB0aGUgbW9yZSBsYXRlci4KCldlIHdpbGwgbm90IHRvdWNoIHRoZSB0ZXN0aW5nIHNldCB1bnRpbCB3ZSBoYXZlIGNvbXBsZXRlZCB0dW5pbmcgb3IgbW9kZWwgd2l0aCB0aGUgdHJhaW5pbmcgc2V0LiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gaGF2ZSBhIGxlc3MgYmlhc2VkIGV2YWx1YXRpb24gb2YgaG93IHdlbGwgb3VyIG1vZGVsIGNhbiBkbyB3aXRoIG90aGVyIGRhdGEgYmVzaWRlcyB0aGUgZGF0YSB1c2VkIGluIHRoZSB0cmFpbmluZyBzZXQgdG8gYnVpbGQgdGhlIG1vZGVsLiBJZGVhbGx5IHlvdSB3b3VsZCBhbHNvIHdhbnQgYSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IGRhdGFzZXQgdG8gZnVydGhlciB0ZXN0IHRoZSBwZXJmb3JtYW5jZSBvZiB5b3VyIG1vZGVsLgoKW0hlcmVdKGh0dHBzOi8vbWFjaGluZWxlYXJuaW5nbWFzdGVyeS5jb20vZGlmZmVyZW5jZS10ZXN0LXZhbGlkYXRpb24tZGF0YXNldHMvKXt0YXJnZXQ9Il9ibGFuayJ9IGlzIGEgZ3JlYXQgZGVzY3JpcHRpb24gb2YgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGVzdGluZyBhbmQgdHJhaW5pbmcgZGF0YXNldHMuCgpgYGB7ciwgZWNobz1GQUxTRSwgb3V0LndpZHRoPSI0MDBweCJ9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoImltZyIsInNwbGl0LnBuZyIpKQpgYGAKV2Ugd2lsbCB1c2UgdGhlIGByc2FtcGxlYCBwYWNrYWdlIHRvIHBlcmZvcm0gdGhpcyBzdGVwLgoKVGhlYGluaXRpYWxfc3BsaXQoKWAgZnVuY3Rpb24gYWxsb3dzIHVzIHRvIHNwZWNpZnkgaG93IHdlIHdhbnQgdG8gc3BsaXQgb3VyIGRhdGEuIFR5cGljYWxseSBkYXRhIGlzIHNwbGl0IGludG8gMy80IGZvciB0cmFpbmluZyBhbmQgMS80IGZvciB0ZXN0aW5nLlRoaXMgaXMgdGhlIGRlZmF1bHQgcHJvcG9ydGlvbiBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBzcGVjaWZpZWQuIEhvd2V2ZXIgeW91IGNhbiBjaGFuZ2UgdGhlIHByb3BvcnRpb24gdXNpbmcgdGhlIGBwcm9wYCBhcmd1bWVudCwgd2Ugd2lsbCBkbyB0aGF0IGhlcmUgZm9yIGlsbHVzdHJhdGl2ZSBwdXJwb3Nlcy4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYSB2YXJpYWJsZSB0byBzdHJhdGlmeSBieSB3aXRoIHRoZSBgc3RyYXRhYCBhcmd1bWVudC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgaW1iYWxhbmNlZCBjYXRlZ29yaWNhbCB2YXJpYWJsZXMgYW5kIHlvdSB3b3VsZCBsaWtlIHRvIGludGVudGlvbmFsbHkgbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIHNpbWlsYXIgbnVtYmVyIG9mIHNhbXBsZXMgb2YgdGhlIHJhcmVyIGNhdGVnb3JpZXMgaW4gYm90aCB0aGUgdGVzdGluZyBhbmQgdHJhaW5pbmcgc2V0cy4gT3RoZXJ3aXNlIHRoZSBzcGxpdCBpcyBwZXJmb3JtZWQgcmFuZG9tbHkuIAoKPiBUaGUgc3RyYXRhIGFyZ3VtZW50IGNhdXNlcyB0aGUgcmFuZG9tIHNhbXBsaW5nIHRvIGJlIGNvbmR1Y3RlZCB3aXRoaW4gdGhlIHN0cmF0aWZpY2F0aW9uIHZhcmlhYmxlLiBUaGUgY2FuIGhlbHAgZW5zdXJlIHRoYXQgdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpbiB0aGUgdHJhaW5pbmcgZGF0YSBpcyBlcXVpdmFsZW50IHRvIHRoZSBwcm9wb3J0aW9ucyBpbiB0aGUgb3JpZ2luYWwgZGF0YSBzZXQuCgpJbiB0aGUgY2FzZSB3aXRoIG91ciBkYXRhc2V0LCBwZXJoYXBzIHdvdWxkIGxpa2Ugb3VyIHRyYWluaW5nIHNldCB0byBoYXZlIHNpbWlsYXIgcHJvcG9ydGlvbnMgb2YgbW9uaXRvcnMgZnJvbSBlYWNoIG9mIHRoZSBzdGF0ZXMgYXMgaW4gdGhlIGluaXRpYWwgZGF0YS4gVGhpcyBtaWdodCBiZSB1c2VmdWwgaWYgd2Ugd2FudCBvdXIgbW9kZWwgdG8gYmUgZ2VuZXJhbGl6YWJsZSBhY3Jvc3MgYWxsIG9mIHRoZSBzdGF0ZXMuCgpXZSBjYW4gc2VlIHRoYXQgaW5kZWVkIHRoZXJlIGFyZSBkaWZmZXJlbnQgcHJvcG9ydGlvbnMgb2YgbW9uaXRvcnMgaW4gZWFjaCBzdGF0ZSBieSB1c2luZyB0aGUgYGNvdW50KClgIGZ1bmN0aW9uIG9mIHRoZSBgZHB5cmAgcGFja2FnZS4gCgojIyMjIHsuc2Nyb2xsYWJsZSB9CmBgYHtyfQojIFNjcm9sbCB0aHJvdWdoIHRoZSBvdXRwdXQhCmNvdW50KHBtLCBzdGF0ZSkgJT4lCiAgcHJpbnQobiA9IDFlMykKYGBgCiMjIyMKCklmIG91ciBkYXRhc2V0IHdlcmUgbGFyZ2UgZW5vdWdoIGl0IG1pZ2h0IGJlIG5pY2UgdGhlbiB0byBzdHJhdGlmeSBieSBzdGF0ZSwgYnV0IG91ciBkYXRhIGlzIG5vdCB1bmZvcnR1bmF0ZWx5IG5vdCBsYXJnZSBlbm91Z2guIFdlIHdpbGwgc2hvdyBob3cgb25lIHdvdWxkIGRvIHRoaXMgdGhvdWdoIGZvciBpbGx1c3RyYXRpdmUgcHVycG9zZXMuIFRoaXMgb3B0aW9uIGlzIG1vcmUgaW1wb3J0YW50IGZvciBjbGFzc2lmaWNhdGlvbiBhcHBsaWNhdGlvbnMgb2YgbWFjaGluZSBsZWFybmluZyB0aGFuIGl0IGlzIGZvciBwcmVkaWN0aW9uLgoKU2luY2UgdGhlIHNwbGl0IGlzIHBlcmZvcm1lZCByYW5kb21seSwgaXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlIHRoZSBgc2V0LnNlZWQoKWAgYmFzZSBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCBpZiB5b3VyIHJlcnVuIHlvdXIgY29kZSB0aGF0IHlvdXIgc3BsaXQgd2lsbCBiZSB0aGUgc2FtZSBuZXh0IHRpbWUuIFdlIGNhbiBzZWUgdGhlIG51bWJlciBvZiBtb25pdG9ycyBpbiBvdXIgdHJhaW5pbmcsIHRlc3RpbmcsIGFuZCBvcmlnaW5hbCBkYXRhIGJ5IHR5cGluZyBpbiB0aGUgbmFtZSBvZiBvdXIgc3BsaXQgb2JqZWN0LiBUaGUgcmVzdWx0IHdpbGwgbG9vayBsaWtlIHRoaXM6Cjx0cmFpbmluZyBkYXRhIHNhbXBsZSBudW1iZXIsIHRlc3RpbmcgZGF0YSBzYW1wbGUgbnVtYmVyLCBvcmlnaW5hbCBzYW1wbGUgbnVtYmVyPiAKCmBgYHtyfQpzZXQuc2VlZCgxMjM0KQpwbV9zcGxpdCA8LXJzYW1wbGU6OmluaXRpYWxfc3BsaXQoZGF0YSA9IHBtLCBwcm9wID0gMi8zKQpwbV9zcGxpdAoKIyBJZiBzdHJhdGlmeWluZzoKIyBwbV9zcGxpdF9zdHJhdGEgPC1yc2FtcGxlOjppbml0aWFsX3NwbGl0KGRhdGEgPSBwbSwgcHJvcCA9IDIvMywgc3RyYXRhID0gInN0YXRlIikKCmBgYAoKSW1wb3J0YW50bHkgdGhlIGBpbml0aWFsX3NwbGl0YCBmdW5jdGlvbiBvbmx5IGRldGVybWluZXMgd2hhdCByb3dzIG9mIG91ciBwbSBkYXRhIGZyYW1lIHNob3VsZCBiZSBhc3NpZ25lZCBmb3IgdHJhaW5pbmcgb3IgdGVzdGluZywgaXQgZG9lcyBub3QgYWN0dWFsbHkgc3BsaXQgdGhlIGRhdGEuIAoKVG8gZXh0cmFjdCB0aGUgdGVzdGluZyBhbmQgdHJhaW5pbmcgZGF0YSB3ZSBjYW4gdXNlIHRoZSBgdHJhaW5pbmcoKWAgYW5kIGB0ZXN0aW5nKClgIGZ1bmN0aW9ucyBhbHNvIG9mIHRoZSBgcnNhbXBsZWAgcGFja2FnZS4KCiMjIyMgey5zY3JvbGxhYmxlIH0KYGBge3J9CiB0cmFpbl9wbSA8LXJzYW1wbGU6OnRyYWluaW5nKHBtX3NwbGl0KQogdGVzdF9wbSA8LXJzYW1wbGU6OnRlc3RpbmcocG1fc3BsaXQpCiAKIyBTY3JvbGwgdGhyb3VnaCB0aGUgb3V0cHV0IQpjb3VudCh0cmFpbl9wbSwgc3RhdGUpCmNvdW50KHRlc3RfcG0sIHN0YXRlKQpgYGAKIyMjIwoKV2Ugd2lsbCB1c2UgdGhlIGByc2FtcGxlYCBwYWNrYWdlIGFnYWluIHdlIGxvb2sgYXQgaW1wbGVtZW50aW5nIHdoYXQgYXJlIGNhbGxlZCBjcm9zcyB2YWxpZGF0aW9uIHRlY2huaXF1ZXMuCgpDcm9zcyB2YWxpZGF0aW9uIHNwbGl0cyBvdXIgdHJhaW5pbmcgZGF0YSBpbnRvIG11bHRpcGxlIHRyYWluaW5nIGRhdGEgc2V0cyB0byBhbGxvdyBmb3IgYW4gYXNzZXNzbWVudCBvZiB0aGUgYWNjdXJhY3kgb2YgdGhlIG1vZGVsIGFzIHdlIGFyZSB0cmFpbmluZyBpdC4gCgpOb3RlOiBQZW9wbGUgdHlwaWNhbGx5IGlnbm9yZSBzcGF0aWFsIGRlcGVuZGVuY2Ugd2l0aCBjcm9zcyB2YWxpZGF0aW9uIG9mIGFpciBwb2xsdXRpb24gbW9uaXRvcmluZyBkYXRhIGluIHRoZSBhaXIgcG9sbHV0aW9uIGZpZWxkLCBzbyB3ZSB3aWxsIGRvIHRoZSBzYW1lLiAgSG93ZXZlciwgaXQgbWlnaHQgbWFrZSBzZW5zZSB0byBsZWF2ZSBvdXQgYmxvY2tzIG9mIG1vbml0b3JzIHJhdGhlciB0aGFuICByYW5kb20gaW5kaXZpZHVhbCBtb25pdG9ycyB0byBoZWxwIGFjY291bnQgZm9yIHNvbWUgc3BhdGlhbCBkZXBlbmRlbmNlLgoKIyMjIFZhcmlhYmxlIFJvbGUgQXNzaWdubWVudCBhbmQgUHJlcHJvY2Vzc2luZwoKQSByZWNpcGUgaXMgYSBzdGFuZGFyZGl6ZWQgZm9ybWF0IGZvciBhIHNlcXVlbmNlIG9mIHN0ZXBzIGZvciBwcm9jZXNzaW5nIHRoZSBkYXRhLgoKVGhpcyBjYW4gYmUgdmVyeSB1c2VmdWwgYmVjYXVzZSBpdCBtYWtlcyB0ZXN0aW5nIG91dCBkaWZmZXJlbnQgcHJlcHJvY2Vzc2luZyBzdGVwcyBvciBkaWZmZXJlbnQgYWxnb3JpdGhtcyB3aXRoIHRoZSBzYW1lIHByZXByb2Nlc3NpbmcgdmVyeSBlYXN5IGFuZCByZXByb2R1Y2libGUuCgoqKkNyZWF0aW5nIGEgcmVjaXBlIHNwZWNpZmllcyBob3cgYSBkYXRhZnJhbWUgb2YgcHJlZGljdG9ycyBzaG91bGQgYmUgY3JlYXRlZCAgLSBpdCBzcGVjaWZpZXMgd2hhdCAgdmFyaWFibGVzIHRvIGJlIHVzZWQgIGFuZCB0aGUgIHByZXByb2Nlc3Npbmcgc3RlcHMgIGJ1dCBpdCBkb2VzIG5vdCBleGVjdXRlIHRoZXNlIHN0ZXBzIG9yIGNyZWF0ZSB0aGUgZGF0YWZyYW1lIG9mIHByZWRpY3RvcnMuKioKCiMjIyMgTGlzdCB0aGUgaW5ncmVkaWVudHMgLyBzcGVjaWZ5IHRoZSB2YXJpYWJsZXMgd2l0aCB0aGUgYHJlY2lwZSgpYCBmdW5jdGlvbgoKVGhlIGZpcnN0IHRoaW5nIHRvIGRvIHRvIGNyZWF0ZSBhIHJlY2lwZSBpcyB0byBzcGVjaWZ5IHdoaWNoIHZhcmlhYmxlcyB3ZSB3aWxsIGJlIHVzaW5nIGFzIG91ciBvdXRjb21lIGFuZCBwcmVkaWN0b3JzIHVzaW5nIHRoZSBgcmVjaXBlKClgIGZ1bmN0aW9uLiBJbiB0ZXJtcyBvZiB0aGUgbWV0YXBob3Igb2YgYmFraW5nLCB3ZSBjYW4gdGhpbmsgb2YgdGhpcyBhcyBsaXN0aW5nIG91ciBpbmdyZWRpZW50cy4gVGhlIG5hbWluZyBjb252ZW50aW9uIGZvciByZWNpcGUgb2JqZWN0IG5hbWVzIGlzIGAqX3JlY2Agb3IgYHJlY2AuIAoKYGBge3IsIGVjaG89RkFMU0UsIG91dC53aWR0aD0iNDAwcHgifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJpbWciLCJyZWNpcGVzMS5wbmciKSkKYGBgCgoKSW4gb3VyIGNhc2UgcmVjYWxsIHRoYXQgb3VyIGB2YWx1ZWAgdmFyaWFibGUsIHdoaWNoIGlzIHRoZSBhdmVyYWdlIGFubnVhbCBncmF2aW1ldHJpYyBtb25pdG9yIFBNfjIuNX4gY29uY2VudHJhdGlvbiBpbiB1Zy9tXjNeLiBPdXIgcHJlZGljdG9ycyBhcmUgYWxsIHRoZSBvdGhlciB2YXJpYWJsZXMgZXhjZXB0IHRoZSBtb25pdG9yIElELCB3aGljaCBpcyB0aGUgYGlkYCB2YXJpYWJsZS4KClRoZSByZWFzb24gbm90IHRvIGluY2x1ZGUgdGhpcyB2YXJpYWJsZSBpcyBiZWNhdXNlIHRoaXMgdmFyaWFibGUgaW5jbHVkZXMgdGhlIGNvdW50eSBudW1iZXIgYW5kIGEgbnVtYmVyIGRlc2lnbmF0aW5nIHdoaWNoIHBhcnRpY3VsYXIgbW9uaXRvciB0aGUgdmFsdWVzIGNhbWUgZnJvbSBvZiB0aGUgbW9uaXRvcnMgdGhlcmUgYXJlIGluIHRoYXQgY291bnR5LiBTaW5jZSB0aGlzIG51bWJlciBpcyBhcmJpdHJhcnkgYW5kIHRoZSBjb3VudHkgaW5mb3JtYXRpb24gaXMgYWxzbyBnaXZlbiBpbiB0aGUgZGF0YSwgYW5kIHRoZSBmYWN0IHRoYXQgZWFjaCBtb25pdG9yIG9ubHkgaGFzIG9uZSB2YWx1ZSBpbiB0aGUgYHZhbHVlYCB2YXJpYWJsZSwgbm90aGluZyBpcyBnYWluZWQgYnkgaW5jbHVkaW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IG1heSBpbnN0ZWFkIGludHJvZHVjZSBub2lzZS4gSG93ZXZlciwgaXQgaXMgdXNlZnVsIHRvIGtlZXAgdGhpcyBkYXRhIHRvIHRha2UgYSBsb29rIGF0IHdoYXQgaXMgaGFwcGVuaW5nIGxhdGVyLiBXZSB3aWxsIHNob3cgeW91IHdhbnQgdG8gZG8gaW4gdGhpcyBjYXNlIGluIGp1c3QgYSBiaXQuCgpUaGUgc2ltcGxlc3QgcmVjaXBlIHdpdGggbm8gcHJlcHJvY2Vzc2luZyBzdGVwcywgd291bGQgYmUgdG8gc2ltcGx5IGxpc3QgdGhlIG91dGNvbWUgYW5kIHByZWRpY3RvciB2YXJpYWJsZXMuCgpXZSBjYW4gZG8gc28gaW4gdHdvIHdheXMuIAoKMSkgVXNpbmcgZm9ybXVsYSBub3RhdGlvbgoyKSBBc3NpZ25pbmcgcm9sZXMgdG8gZWFjaCB2YXJpYWJsZQoKTGV0J3MgbG9vayBhdCB0aGUgZmlyc3Qgd2F5IHVzaW5nIGZvcm11bGEgbm90YXRpb24sIHdoaWNoIGxvb2tzIGxpa2UgdGhpczoKCm91dGNvbWUocykgfiBwcmVkaWN0b3IocykgIAoKSWYgaW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGUgcHJlZGljdG9ycyBvciBhIG11bHRpdmFyaWF0ZSBzaXR1YXRpb24gd2l0aCB0d28gb3V0Y29tZXMsIHVzZSBhIHBsdXMgc2lnbgoKb3V0Y29tZTEgKyBvdXRjb21lMiB+IHByZWRpY3RvcjEgKyBwcmVkaWN0b3IyCgpJZiB3ZSB3YW50IHRvIGluY2x1ZGUgYWxsIHByZWRpY3RvcnMgd2UgY2FuIHVzZSBhIHBlcmlvZCBsaWtlIHNvOgoKb3V0Y29tZV92YXJpYWJsZV9uYW1lIH4gLgoKTm93IHdpdGggb3VyIGRhdGEgd2Ugd2lsbCBzdGFydCBieSBtYWtpbmcgYSByZWNpcGUgZm9yIG91ciB0cmFpbmluZyBkYXRhLiBJbiB0aGUgc2ltcGxlc3QgY2FzZSB3ZSBtaWdodCB1c2UgYWxsIHByZWRpY3RvcnMgbGlrZSB0aGlzOgoKYGBge3J9CgpzaW1wbGVfcmVjIDwtdHJhaW5fcG0gJT4lCiAgcmVjaXBlczo6cmVjaXBlKHZhbHVlIH4gLikKCnNpbXBsZV9yZWMKYGBgCgoKSG93ZXZlciwgdG8gZGVhbCB3aXRoIHRoZSBpZCB2YXJpYWJsZSB3ZSBjb3VsZCB1c2UgdGhlIGB1cGRhdGVfcm9sZSgpYCBmdW5jdGlvbiBvZiB0aGUgYHJlY2lwZXNgIHBhY2thZ2U6CgpgYGB7cn0KCnNpbXBsZV9yZWMgPC10cmFpbl9wbSAlPiUKICByZWNpcGVzOjpyZWNpcGUodmFsdWUgfiAuKSAlPiUKICByZWNpcGVzOjp1cGRhdGVfcm9sZShpZCwgbmV3X3JvbGUgPSAiaWQgdmFyaWFibGUiKQoKc2ltcGxlX3JlYwpgYGAKV2UgY291bGQgYWxzbyBzcGVjaWZ5IHRoZSBvdXRjb21lIGFuZCBwcmVkaWN0b3JzIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgaWQgdmFyaWFibGUuIFBsZWFzZSBzZWUgW2hlcmVdKGh0dHBzOi8vdGlkeW1vZGVscy5naXRodWIuaW8vcmVjaXBlcy9yZWZlcmVuY2UvcmVjaXBlLmh0bWwpIGZvciBleGFtcGxlcyBvZiBvdGhlciByb2xlcyBmb3IgdmFyaWFibGVzLiBUaGUgcm9sZSBjYW4gYmUgaG93ZXZlciBhbnkgdmFsdWUuIFRoZSBvcmRlciBpcyBpbXBvcnRhbnQgaGVyZSwgYXMgd2UgZmlyc3QgbWFrZSBhbGwgdmFyaWFibGVzIHByZWRpY3RvcnMgYW5kIHRoZW4gb3ZlcnJpZGUgdGhpcyByb2xlIGZvciB0aGUgb3V0Y29tZSBhbmQgaWQgdmFyaWFibGUuIFdlIHdpbGwgdXNlIHRoZSBgZXZlcnl0aGluZygpYCBmdW5jdGlvbiBvZiB0aGUgYGRwbHlyYCBwYWNrYWdlIHRvIHN0YXJ0IHdpdGggYWxsIG9mIHRoZSB2YXJpYWJsZXMgaW4gYHRyYWluX3BtYC4KCmBgYHtyfQoKc2ltcGxlX3JlYyA8LXJlY2lwZSh0cmFpbl9wbSkgJT4lCiAgICB1cGRhdGVfcm9sZShldmVyeXRoaW5nKCksIG5ld19yb2xlID0gInByZWRpY3RvciIpJT4lCiAgICB1cGRhdGVfcm9sZSh2YWx1ZSwgbmV3X3JvbGUgPSAib3V0Y29tZSIpJT4lCiAgICB1cGRhdGVfcm9sZShpZCwgbmV3X3JvbGUgPSAiaWQgdmFyaWFibGUiKQoKc2ltcGxlX3JlYwoKYGBgCgpJZiB3ZSB3YW50IHRvIHRha2UgYSBsb29rIGF0IG91ciBmb3JtdWxhIGZyb20gb3VyIHJlY2lwZSB3ZSBjYW4gZG8gdXNlIHRoZSBgZm9ybXVsYSgpYCBmdW5jdGlvbiBvZiB0aGUgYHN0YXRzYCBwYWNrYWdlLgoKYGBge3J9CmZvcm11bGEoc2ltcGxlX3JlYykKYGBgCgpXZSBjYW4gYWxzbyB2aWV3IG91ciByZWNpcGUgaW4gbW9yZSBkZXRhaWwgdXNpbmcgdGhlIGJhc2UgYHN1bW1hcnkoKWAgZnVuY3Rpb24uCgpgYGB7cn0Kc3VtbWFyeShzaW1wbGVfcmVjKQpgYGAKCiMjIyMgTGlzdCB0aGUgcHJlcHJvY2Vzc2luZyBzdGVwcyB1c2luZyB0aGUgc3RlcCBmdW5jdGlvbnMgb2YgdGhlIGByZWNpcGVgIHBhY2thZ2UKClRoZSBvdGhlciB0aGluZyB0aGUgcmVjaXBlcyBwYWNrYWdlIGFsbG93cyBmb3IgaXMgc3BlY2lmeWluZyBwcmVwcm9jZXNzaW5nIHN0ZXBzLgoKYGBge3IsIGVjaG89RkFMU0UsIG91dC53aWR0aD0iNDAwcHgifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJpbWciLCJyZWNpcGVzMi5wbmciKSkKYGBgCgoKKipUaGlzIFtsaW5rXShodHRwczovL3RpZHltb2RlbHMuZ2l0aHViLmlvL3JlY2lwZXMvcmVmZXJlbmNlL2luZGV4Lmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gYW5kIHRoaXMgW2xpbmtdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9yZWNpcGVzL3JlY2lwZXMucGRmKXt0YXJnZXQ9Il9ibGFuayJ9IHNob3cgdGhlIG1hbnkgb3B0aW9ucyBmb3IgcmVjaXBlIHN0ZXAgZnVuY3Rpb25zLioqCgo8dT5UaGVyZSBhcmUgc3RlcCBmdW5jdGlvbnMgZm9yIGEgdmFyaWV0eSBvZiBwdXJwb3Nlczo8L3U+CgoxKSBbKipJbXB1dGF0aW9uKipdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ltcHV0YXRpb25fKHN0YXRpc3RpY3MpKXt0YXJnZXQ9Il9ibGFuayJ9ICAtLSB3aGljaCBtZWFucyBmaWxsaW5nIGluIG1pc3NpbmcgdmFsdWVzIGJhc2VkIG9uIHRoZSBleGlzdGluZyBkYXRhIAoyKSBbKipUcmFuc2Zvcm1hdGlvbioqXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRhX3RyYW5zZm9ybWF0aW9uXyhzdGF0aXN0aWNzKSl7dGFyZ2V0PSJfYmxhbmsifSAgLS0gd2hpY2ggbWVhbnMgY2hhbmdpbmcgYWxsIHZhbHVlcyBvZiBhIHZhcmlhYmxlIGluIHRoZSBzYW1lIHdheSwgdHlwaWNhbGx5IHRvIG1ha2UgaXQgbW9yZSBub3JtYWwgb3IgZWFzaWVyIHRvIGludGVycHJldCkgIAozKSBbKipEaXNjcmV0aXphdGlvbioqXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EaXNjcmV0aXphdGlvbl9vZl9jb250aW51b3VzX2ZlYXR1cmVzKSAtLSB3aGljaCBtZWFucyBjb252ZXJ0aW5nIGNvbnRpbnVvdXMgdmFsdWVzIGludG8gZGlzY3JldGUgb3Igbm9taW5hbCB2YWx1ZXMgLSBiaW5uaW5nIGZvciBleGFtcGxlIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGxldmVscykgIChIb3dldmVyIHRoaXMgaXMgZ2VuZXJhbGx5IG5vdCBhZHZpc2FibGUhKQo0KSBbKipFbmNvZGluZyAvIENyZWF0aW5nIER1bW15IFZhcmlhYmxlcyoqXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EdW1teV92YXJpYWJsZV8oc3RhdGlzdGljcykpIC0tIHdoaWNoIG1lYW5zIGNyZWF0aW5nIGEgbnVtZXJpYyBjb2RlIGZvciBjYXRlZ29yaWNhbCB2YXJpYWJsZXMKWyoqTW9yZSBvbiBEdW1teSBWYXJpYWJsZXMgYW5kIG9uZSBob3QgZW5jb2RpbmcqKl0oaHR0cHM6Ly9tZWRpdW0uY29tL3AvYjU4NDBiZTNjNDFhL3Jlc3BvbnNlcy9zaG93KQo1KSBbKipEYXRhIHR5cGUgY29udmVyc2lvbnMqKl0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2hhYmxhci92aWduZXR0ZXMvY29udmVydC5odG1sKSAtLSB3aGljaCBtZWFucyBjaGFuZ2luZyBmcm9tIGludGVnZXIgdG8gZmFjdG9yIG9yIG51bWVyaWMgdG8gZGF0ZSBldGMuCjYpIFsqKkludGVyYWN0aW9uKipdKGh0dHBzOi8vc3RhdGlzdGljc2J5amltLmNvbS9yZWdyZXNzaW9uL2ludGVyYWN0aW9uLWVmZmVjdHMvKSB0ZXJtIGFkZGl0aW9uIHRvIHRoZSBtb2RlbCAtLSB3aGljaCBtZWFucyB0aGF0IHdlIHdvdWxkIGJlIG1vZGVsaW5nIGZvciBwcmVkaWN0b3JzIHRoYXQgd291bGQgaW5mbHVlbmNlIHRoZSBjYXBhY2l0eSBvZiBlYWNoIG90aGVyIHRvIHByZWRpY3QgdGhlIG91dGNvbWUKNykgWyoqTm9ybWFsaXphdGlvbioqXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Ob3JtYWxpemF0aW9uXyhzdGF0aXN0aWNzKSkgLS0gd2hpY2ggbWVhbnMgY2VudGVyaW5nIGFuZCBzY2FsaW5nIHRoZSBkYXRhIHRvIGEgc2ltaWxhciByYW5nZSBvZiB2YWx1ZXMKOCkgWyoqRGltZW5zaW9uYWxpdHkgUmVkdWN0aW9uLyBTaWduYWwgRXh0cmFjdGlvbioqXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EaW1lbnNpb25hbGl0eV9yZWR1Y3Rpb24pIC0tIHdoaWNoIG1lYW5zIG1hdGhlbWF0aWNhbGx5IG9idGFpbmluZyBhIG5ldyBzbWFsbGVyIHNldCBvZiB2YXJpYWJsZXMgdGhhdCBjYXB0dXJlIHRoZSB2YXJpYXRpb24gb3Igc2lnbmFsIGluIHRoZSBvcmlnaW5hbCB2YXJpYWJsZXMgKGV4LiBQcmluY2lwYWwgQ29tcG9uZW50IEFuYWx5c2lzIGFuZCBJbmRlcGVuZGVudCBDb21wb25lbnQgQW5hbHlzaXMpCjkpICoqRmlsdGVyaW5nKiogLS0gRmlsdGVyaW5nIG9wdGlvbnMgZm9yIHJlbW92aW5nIHZhcmlhYmxlcyAoZXguIHJlbW92ZSB2YXJpYWJsZXMgdGhhdCBhcmUgaGlnaGx5IGNvcnJlbGF0ZWQgdG8gb3RoZXJzIG9yIHJlbW92ZSB2YXJpYWJsZXMgd2l0aCB2ZXJ5IGxpdHRsZSB2YXJpYW5jZSBhbmQgdGhlcmVmb3JlIGxpa2VseSBsaXR0bGUgcHJlZGljdGl2ZSBjYXBhY2l0eSkKMTApIFsqKlJvdyBvcGVyYXRpb25zKipdKGh0dHBzOi8vdGFydGFydXMub3JnL2dhcmV0aC9tYXRocy9MaW5lYXJfQWxnZWJyYS9yb3dfb3BlcmF0aW9ucy5wZGYpIC0tIHdoaWNoIG1lYW5zIHBlcmZvcm1pbmcgZnVuY3Rpb25zIG9uIHRoZSB2YWx1ZXMgd2l0aGluIHRoZSByb3dzICAoZXguIHJlYXJyYW5naW5nLCBmaWx0ZXJpbmcsIGltcHV0aW5nKQoxMSkgKipDaGVja2luZyBmdW5jdGlvbnMqKiAtLSBTYW5pdHkgY2hlY2tzIHRvIGxvb2sgZm9yIG1pc3NpbmcgdmFsdWVzLCB0byBsb29rIGF0IHRoZSB2YXJpYWJsZSBjbGFzc2VzIGV0Yy4KCkFsbCBvZiB0aGUgc3RlcCBmdW5jdGlvbnMgbG9vayBsaWtlIGBzdGVwXypgIGV4Y2VwdCBmb3IgdGhlIGNoZWNrIGZ1bmN0aW9ucyB3aGljaCBsb29rIGxpa2UgYGNoZWNrXypgLgoKVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBzZWxlY3Qgd2hhdCB2YXJpYWJsZXMgdG8gYXBwbHkgc3RlcHMgdG86ICAKMSkgdGlkeXNlbGVjdCBtZXRob2RzOiBgY29udGFpbnMoKWAsIGBtYXRjaGVzKClgLCBgc3RhcnRzX3dpdGgoKWAsIGBlbmRzX3dpdGgoKWAsIGBldmVyeXRoaW5nKClgLCBgbnVtX3JhbmdlKClgICAKMikgYmFzZWQgb24gdGhlIHR5cGU6IGBhbGxfbm9taW5hbCgpYCwgYGFsbF9udW1lcmljKClgICwgYGhhc190eXBlKClgIAozKSBiYXNlZCBvbiB0aGUgcm9sZTogYGFsbF9wcmVkaWN0b3JzKClgLCBgYWxsX291dGNvbWVzKClgLCBgaGFzX3JvbGUoKWAKNCkgbmFtZSAtIHVzZSB0aGUgYWN0dWFsIG5hbWUgb2YgdGhlIHZhcmlhYmxlL3ZhcmlhYmxlcyBvZiBpbnRlcmVzdCAgCgoKTGV0J3MgdHJ5IGFkZGluZyBzb21lIHN0ZXBzIHRvIG91ciByZWNpcGUuCgpXZSBtaWdodCBjb25zaWRlciBsb2cgdHJhbnNmb3JtaW5nIG91ciBwb3B1bGF0aW9uIGFuZCBhcmVhIHZhcmlhYmxlcyAodGhhdCBhcmVuJ3QgZGVuc2l0aWVzKS0gbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJhbmdlIG9mIHRoZXNlIHZhcmlhYmxlcy4KYGBge3J9CnBtICU+JQogIHNlbGVjdChtYXRjaGVzKCJfcG9wfF9hcmVhIikpICU+JQogIG1hcChyYW5nZSkKYGBgCldlIGNhbiBzZWUgdGhhdCB0aGUgcmFuZ2UgZm9yIGVhY2ggb2YgdGhlc2UgdmFyaWFibGVzIGlzIHF1aXRlIGxhcmdlLCB3ZSBjYW4gbG9nIHRyYW5zZm9ybSB0aGlzIGRhdGEgdXNpbmcgdGhlIGBzdGVwX2xvZygpYCBmdW5jdGlvbiBvZiB0aGUgYHJlY2lwZXNgIHBhY2thZ2UuCgoKV2Ugd291bGQgYWxzbyB3YW50IHRvIHBvdGVudGlhbGx5IG9uZSBob3QgZW5jb2RlIHNvbWUgb2Ygb3VyIGNhdGVnb3JpY2FsIHZhcmlhYmxlcyBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgd2l0aCBjZXJ0YWluIGFsZ29yaXRobXMuIFdlIGNhbiBkbyB0aGlzIHdpdGggdGhlIGBzdGVwX2R1bW15KClgIGZ1bmN0aW9uIGFuZCB0aGUgYG9uZV9ob3QgPSBUUlVFYCBhcmd1bWVudC4gT3VyIGZpcHMgdmFyaWFibGUgaW5jbHVkZXMgYSBudW1lcmljIGNvZGUgZm9yIHN0YXRlIGFuZCBjb3VudHkgLSBhbmQgdGhlcmVmb3JlIGlzIGVzc2VudGlhbGx5IGEgcHJveHkgZm9yIGNvdW50eS4gIFNvIGlmIHdlIG9uZSBob3QgZW5jb2RlIGNvdW50eSwgd2Ugd291bGQgd2FudCB0byBpbmNsdWRlIHRoaXMgcmF0aGVyIHRoYW4gdGhlIGZpcHMgaWQuIFRoaXMgd291bGQgYmUgcHJlZmVyYWJsZSBiZWNhdXNlIHRoZSBmaXBzIGlzIHJlbGF0aXZlbHkgc3BlYWtpbmcgYXJiaXRyYXJ5LSB0aGUgbnVtYmVycyBhbHRob3VnaCBtZWFuaW5nZnVsIGRvbid0IHJlYWxseSBoYXZlIGFuIG9yZGVyLiBKdXN0IGJlY2F1c2UgQWxhYmFtYSBjb21lcyBmaXJzdCBpbiB0aGUgYWxwaGFiZXQsIGRvZXMgbm90IG1lYW4gdGhhdCBtb25pdG9ycyBpbiB0aGlzIHN0YXRlIGhhdmUgYSByYW5rIG9yZGVyIGRpZmZlcmVudCBmcm9tIG1vbml0b3JzIGluIFd5b21pbmcuCgpXZSBjYW4gcmVtb3ZlIHRoZSBgZmlwc2AgdmFyaWFibGUgZnJvbSB0aGUgcHJlZGljdG9ycyB1c2luZyBgdXBkYXRlX3JvbGUoKWAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJvbGUgaXMgbm8gbG9uZ2VyIGAicHJlZGljdG9yImAuIFdlIGNhbiBtYWtlIHRoZSByb2xlIGFueXRoaW5nIHdlIHdhbnQgYWN0dWFsbHksIHNvIHdlIHdpbGwga2VlcCBpdCBzb21ldGhpbmcgaWRlbnRpZmlhYmxlLgoKV2UgbWlnaHQgYWxzbyB3YW50IHRvIHJlbW92ZSB2YXJpYWJsZXMgdGhhdCBhcHBlYXIgdG8gYmUgcmVkdW5kYW50IGFuZCBhcmUgaGlnaGx5IGNvcnJlbGF0ZWQgd2l0aCBvdGhlcnMsIGFzIHdlIGtub3cgZnJvbSBvdXIgZXhwbG9yYXRvcnkgZGF0YSBhbmFseXNpcyB0aGF0IG1hbnkgb2Ygb3VyIHZhcmlhYmxlcyBhcmUgY29ycmVsYXRlZCB3aXRoIG9uZSBhbm90aGVyLiBXZSBjYW4gZG8gdGhpcyB1c2luZyB0aGUgYHN0ZXBfY29ycigpYCBmdW5jdGlvbi4KCioqSXQgaXMgaW1wb3J0YW50IHRvIGFkZCB0aGUgc3RlcHMgdG8gdGhlIHJlY2lwZSBpbiBhbiBvcmRlciB0aGF0IG1ha2VzIHNlbnNlIGp1c3QgbGlrZSB3aXRoIGEgY29va2luZyByZWNpcGUuKioKCmBgYHtyfQpzaW1wbGVfcmVjICU8PiUKICAjc3RlcF9sb2cobWF0Y2hlcygiX3BvcHxfYXJlYSIpKSAlPiUKICB1cGRhdGVfcm9sZSgiZmlwcyIsIG5ld19yb2xlID0gImNvdW50eSBpZCIpICU+JQogIHN0ZXBfZHVtbXkoc3RhdGUsIGNvdW50eSwgY2l0eSwgemN0YSkgJT4lCiAgI3N0ZXBfZHVtbXkoc3RhdGUsIGNvdW50eSwgY2l0eSwgemN0YSwgb25lX2hvdCA9IFRSVUUpICU+JQogIHN0ZXBfbnp2KGFsbF9wcmVkaWN0b3JzKCkpCiAgI3N0ZXBfY29ycihhbGxfcHJlZGljdG9ycygpLCAtIENNQVEsIC0gYW9kKSAlPiUKICMgY2hlY2tfbmV3X3ZhbHVlcyhhbGxfcHJlZGljdG9ycygpKSAlPiUKICAjY2hlY2tfcmFuZ2UoYWxsX3ByZWRpY3RvcnMoKSkKCiAgCnNpbXBsZV9yZWMKYGBgCgoKIyMjIE9QVElPTkFMOiBSdW5uaW5nIHRoZSBwcmVwcm9jZXNzaW5nICh0byBzZWUgaXQpCgpUaGUgbmV4dCBtYWpvciBmdW5jdGlvbiBvZiB0aGUgYHJlY2lwZXNgIHBhY2thZ2UgaXMgYHByZXAoKWAuCgpUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIHJlY2lwZSBvYmplY3QgYmFzZWQgb24gdGhlIHRyYWluaW5nIGRhdGEuIEl0IGVzdGltYXRlcyBwYXJhbWV0ZXJzIChlc3RpbWF0aW5nIHRoZSByZXF1aXJlZCBxdWFudGl0aWVzIGFuZCBzdGF0aXN0aWNzIHJlcXVpcmVkIGJ5IHRoZSBzdGVwcyBmb3IgdGhlIHZhcmlhYmxlcykgZm9yIHByZXByb2Nlc3NpbmcgYW5kICB1cGRhdGVzIHRoZSBtb2RlbCB0ZXJtcywgYXMgc29tZSBvZiB0aGUgcHJlZGljdG9ycyBtYXkgYmUgcmVtb3ZlZCwgdGhpcyBhbGxvd3MgdGhlIHJlY2lwZSB0byBiZSByZWFkeSB0byB1c2Ugb24gb3RoZXIgZGF0YXNldHMuIEl0IGRvZXNuJ3QgbmVjZXNzYXJpbHkgYWN0dWFsbHkgZXhlY3V0ZSB0aGUgcHJlcHJvY2Vzc2luZyBpdHNlbGYsIGhvd2V2ZXIgd2Ugd2lsbCBzcGVjaWZ5IGluIGFyZ3VtZW50IGZvciBpdCB0byBkbyB0aGlzIHNvIHRoYXQgd2UgY2FuIHRha2UgYSBsb29rIGF0IHRoZSBwcmVwcm9jZXNzZWQgZGF0YS4KClRoZXJlIGFyZSBzb21lIGltcG9ydGFudCBhcmd1bWVudHMgdG8ga25vdyBhYm91dDoKMSkgdHJhaW5pbmcgLSB5b3UgbXVzdCBzdXBwbHkgYSB0cmFpbmluZyBkYXRhIHNldCB0byBlc3RpbWF0ZSBwYXJhbWV0ZXJzIGZvciBwcmVwcm9jZXNzaW5nIG9wZXJhdGlvbnMgKHJlY2lwZSBzdGVwcykgLSB0aGlzIG1heSBhbHJlYWR5IGJlIGluY2x1ZGVkIGluIHlvdXIgcmVjaXBlIC0gYXMgaXMgdGhlIGNhc2UgZm9yIHVzCjIpIGZyZXNoIC0gaWYgVFJVRSAtIHdpbGwgcmV0cmFpbiBhbmQgZXN0aW1hdGUgcGFyYW1ldGVycyBmb3IgYW55IHByZXZpb3VzIHN0ZXBzIHRoYXQgd2VyZSBhbHJlYWR5IHByZXBwZWQgaWYgeW91IGFkZCBtb3JlIHN0ZXBzIHRvIHRoZSByZWNpcGUKMykgdmVyYm9zZSAtIGlmIGBUUlVFYCBzaG93cyB0aGUgcHJvZ3Jlc3MgYXMgdGhlIHN0ZXBzIGFyZSBldmFsdWF0ZWQgYW5kIHRoZSBzaXplIG9mIHRoZSBwcmVwcm9jZXNzZWQgdHJhaW5pbmcgc2V0CjQpIHJldGFpbiAtIGlmIGBUUlVFYCB0aGVuIHRoZSBwcmVwcm9jZXNzZWQgdHJhaW5pbmcgc2V0IHdpbGwgYmUgc2F2ZWQgd2l0aGluIHRoZSByZWNpcGUgKGFzIHRlbXBsYXRlKS4gVGhpcyBpcyBnb29kIGlmIHlvdSBhcmUgbGlrZWx5IHRvIGFkZCBtb3JlIHN0ZXBzIGFuZCBkb24ndCB3YW50IHRvIHJlcnVuIHRoZSBgcHJlcCgpYCBvbiB0aGUgcHJldmlvdXMgc3RlcHMuIEhvd2V2ZXIgdGhpcyBjYW4gbWFrZSB0aGUgcmVjaXBlIHNpemUgbGFyZ2UuIFRoaXMgaXMgbmVjZXNzYXJ5IGlmIHlvdSB3YW50IHRvIGFjdHVhbGx5IGxvb2sgYXQgdGhlIHByZXByb2Nlc3NlZCBkYXRhLgoKCmBgYHtyfQpwcmVwcGVkX3JlYyA8LSBwcmVwKHNpbXBsZV9yZWMsIHZlcmJvc2UgPSBUUlVFLCByZXRhaW4gPSBUUlVFICkKbmFtZXMocHJlcHBlZF9yZWMpCmBgYAoKVGhlcmUgYXJlIGFsc28gbG90cyBvZiB1c2VmdWwgdGhpbmdzIHRvIGNoZWNrb3V0IGluIHRoZSBvdXRwdXQgb2YgYHByZXAoKWAuCllvdSBjYW4gc2VlOgoxKSB0aGUgYHN0ZXBzYCB0aGF0IHdlcmUgcnVuICAKMikgdGhlIHZhcmlhYmxlIGluZm8gKGB2YXJfaW5mb2ApICAKMykgdGhlIG1vZGVsIGB0ZXJtX2luZm9gCjQpIHRoZSBuZXcgYGxldmVsc2Agb2YgdGhlIHZhcmlhYmxlcyAKNSkgdGhlIG9yaWdpbmFsIGxldmVscyBvZiB0aGUgdmFyaWFibGVzIGBvcmlnX2x2bHNgICAgCjYpIGluZm8gYWJvdXQgdGhlIHRyYWluaW5nIGRhdGEgc2V0IHNpemUgYW5kIGNvbXBsZXRlbmVzcyAoYHRyX2luZm9gKQoKTm90ZTogIFlvdSBtYXkgc2VlIHRoZSBgcHJlcC5yZWNpcGUoKWAgZnVuY3Rpb24gaW4gbWF0ZXJpYWwgdGhhdCB5b3UgcmVhZCBhYm91dCB0aGUgYHJlY2lwZXNgIHBhY2thZ2UuIFRoaXMgaXMgcmVmZXJyaW5nIHRvIHRoZSBgcHJlcCgpYCBmdW5jdGlvbiBvZiB0aGUgYHJlY2lwZXNgIHBhY2thZ2UuCgojIyMjIEV4dHJhY3RpbmcgdGhlIHByZXByb2Nlc3NlZCB0cmFpbmluZyBkYXRhCgpgYGB7ciwgZWNobz1GQUxTRSwgb3V0LndpZHRoPSI0MDBweCJ9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoImltZyIsInJlY2lwZXMzLnBuZyIpKQpgYGAKClNpbmNlIHdlIHJldGFpbmVkIG91ciBwcmVwcm9jZXNzZWQgdHJhaW5pbmcgZGF0YSwgd2UgY2FuIHRha2UgYSBsb29rIGF0IGl0IGxpa2UgYnkgdXNpbmcgdGhlIGBqdWljZSgpYCBmdW5jdGlvbiBvZiB0aGUgYHJlY2lwZXNgIHBhY2thZ2UgbGlrZSB0aGlzOgoKIyMjIyB7LnNjcm9sbGFibGUgfQpgYGB7cn0KIyBTY3JvbGwgdGhlcm91Z2ggdGhlIG91dHB1dCEKcHJlcHBlZF90cmFpbjwtIGp1aWNlKHByZXBwZWRfcmVjKQpnbGltcHNlKHByZXBwZWRfdHJhaW4pCmBgYAojIyMjCgoqKk5vdGUqKjogIFJlY2FsbCB0aGF0IHlvdSBtdXN0IHNwZWNpZnkgYHJldGFpbiA9IFRSVUVgIGFyZ3VtZW50IG9mIHRoZSBgcHJlcCgpYCBmdW5jdGlvbiB0byB1c2UgYGp1aWNlKClgLgoKIyMjIyBFeHRyYWN0aW5nIHRoZSBwcmVwcm9jZXNzZWQgdGVzdGluZyBkYXRhCgpgYGB7ciwgZWNobz1GQUxTRSwgb3V0LndpZHRoPSI0MDBweCJ9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoImltZyIsInJlY2lwZXM0LnBuZyIpKQpgYGAKCkxhdGVyIG9uIGlmIHlvdSB3YW50IHRvIGxvb2sgYXQgdGhlIHByZXByb2Nlc3NlZCB0ZXN0aW5nIGRhdGEgeW91IHdvdWxkIHVzZSB0aGUgYGJha2UoKWAgZnVuY3Rpb24gb2YgdGhlIGByZWNpcGVzYCBwYWNrYWdlIGxpa2UgdGhpczoKCkhvd2V2ZXIgeW91IHdvdWxkIHdhbnQgdG8gbGVhdmUgeW91ciB0ZXN0aW5nIGRhdGEgYWxvbmUgYXQgdGhpcyBwb2ludC4KCiMjIyMgey5zY3JvbGxhYmxlIH0KYGBge3J9CiMgU2Nyb2xsIHRoZXJvdWdoIHRoZSBvdXRwdXQhCmJha2VkX3JlYyA8LSByZWNpcGVzOjpiYWtlKHByZXBwZWRfcmVjLCBuZXdfZGF0YSA9IHRlc3RfcG0pCmdsaW1wc2UoYmFrZWRfcmVjKQpgYGAKIyMjIwoKPiBiYWtlKCkgdGFrZXMgYSB0cmFpbmVkIHJlY2lwZSBhbmQgYXBwbGllcyB0aGUgb3BlcmF0aW9ucyB0byBhIGRhdGEgc2V0IHRvIGNyZWF0ZSBhIGRlc2lnbiBtYXRyaXguCiBmb3IgZXhhbXBsZTogIGl0IGFwcGxpZXMgdGhlIGNlbnRlcmluZyB0byBuZXcgZGF0YSBzZXRzIHVzaW5nIHRoZXNlIG1lYW5zIHVzZWQgdG8gY3JlYXRlIHRoZSByZWNpcGUKCgpOb3RlOiBpZiB5b3UgdXNlIHRoZSBza2lwIG9wdGlvbiBmb3Igc29tZSBvZiB0aGUgcHJlcHJvY2Vzc2luZyBzdGVwcywgYmUgY2FyZWZ1bC4gYGp1aWNlKClgIHdpbGwgc2hvdyBhbGwgb2YgdGhlIHJlc3VsdHMgaWdub3JpbmcgYHNraXAgPSBUUlVFYC4gYGJha2UoKWAgd2lsbCBub3QgbmVjZXNzYXJpbHkgY29uZHVjdCB0aGVzZSBzdGVwcyBvbiB0aGUgbmV3IGRhdGEuIAoKCgojIyMgU3BlY2lmeWluZyB0aGUgTW9kZWwKClNvIGZhciB3ZSBoYXZlIHVzZWQgYHJzYW1wbGVgIHRvIHNwbGl0IHRoZSBkYXRhIGFuZCBgcmVjaXBlc2AgdG8gYXNzaWduIHZhcmlhYmxlIGFuZCB0byBzcGVjaWZ5IGFuZCBwcmVwIG91ciBwcmVwcm9jZXNzaW5nIChhcyB3ZWxsIGFzIHRvIG9wdGlvbmFsbHkgZXh0cmFjdCB0aGUgcHJlcHJvY2Vzc2VkIGRhdGEpLgoKV2Ugd2lsbCBub3cgdXNlIHRoZSBgcGFyc25pcGAgcGFja2FnZSAod2hpY2ggaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgYGNhcmV0YCBwYWNrYWdlIC0gYW5kIGhlbmNlIHdoeSBpdCBpcyBuYW1lZCBhZnRlciB0aGUgdmVnZXRhYmxlKSB0byBzcGVjaWZ5IG91ciBtb2RlbC4KCldlIGFyZSBnb2luZyB0byBzdGFydCB3aXRoIGEgbGluZWFyIHJlZ3Jlc3Npb24gYnV0IHdlIHdpbGwgZGVtb25zdHJhdGUgaG93IHdlIGNhbiB0cnkgZGlmZmVyZW50IG1vZGVscy4KCmBgYHtyfQpQTV9tb2RlbCA8LSBwYXJzbmlwOjpsaW5lYXJfcmVnKCkgI1BNIGZvciBwYXJ0aWN1bGF0ZSBtYXRlcgpQTV9tb2RlbApgYGAKCk9LLiBTbyBmYXIgYWxsIHdlIGhhdmUgdG9sZCBgcGFyc25pcGAgaXMgd2Ugd2FudCB0byB1c2UgYSBsaW5lYXIgcmVncmVzc2lvbi4uLiAgTGV0J3MgdGVsbCBgcGFyc25pcGAgbW9yZSBhYm91dCB3aGF0IHdlIHdhbnQuCgpXZSB3b3VsZCBsaWtlIHRvIHVzZSB0aGUgb3JkaW5hcnkgbGVhc3Qgc3F1YXJlcyBtZXRob2QgdG8gZml0IG91ciBsaW5lYXIgcmVncmVzc2lvbi4gU28gd2Ugd2lsbCB0ZWxsIGBwYXJuc2lwYCB0aGF0IHdlIHdhbnQgdG8gdXNlIHRoZSBgbG1gIHBhY2thZ2UgdG8gaW1wbGVtZW50IG91ciBsaW5lYXIgcmVncmVzc2lvbiAodGhlcmUgYXJlIG1hbnkgb3B0aW9ucyBhY3R1YWxseSkuIFdlIHdpbGwgZG8gc28gYnkgdXNpbmcgdGhlIGBzZXRfZW5naW5lKClgIGZ1bmN0aW9uIG9mIHRoZSBgcGFyc25pcGAgcGFja2FnZS4KCmBgYHtyfQpsbV9QTV9tb2RlbCA8LSAKICBQTV9tb2RlbCAgJT4lCiAgcGFyc25pcDo6c2V0X2VuZ2luZSgibG0iKQoKbG1fUE1fbW9kZWwKCmBgYAoKCiMjIyBGaXR0aW5nIHRoZSBNb2RlbAoKVG8gZml0IG91ciBtb2RlbCB3ZSBjb3VsZCB1c2UgYHBhcnNuaXBgIGFuZCB0aGVuIGFzc2VzcyBvdXIgZml0IHVzaW5nIHRoZSBgeWFyZHN0aWNrYCBwYWNrYWdlLgoKSG93ZXZlciBhIG5ld2VyIHBhY2thZ2UgY2FsbGVkIGB3b3JrZmxvd3NgIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGJvdGggb3VyIHByZXByb2Nlc3Npbmcgc3RlcHMgYW5kIG91ciBtb2RlbCBzcGVjaWZpY2F0aW9uLiBJdCBhbHNvIGFsbG93cyB1cyB0byBpbXBsZW1lbnQgZmFuY2llciBvcHRpbWl6YXRpb25zIGluIGFuIGF1dG9tYXRlZCB3YXksIHNvIGl0IGlzIGdvb2QgdG8gbGVhcm4gYWJvdXQgaXQhCgpTbyB3ZSB3aWxsIG5vdyBjcmVhdGUgYSB3b3JrZmxvdyB3aXRoIHRoZSByZWNpcGUgKG91ciBwcmVwcm9jZXNzaW5nIHNwZWNpZmljYXRpb25zKSB0aGF0IHdlIG1hZGUgYW5kIHRoZSBtb2RlbCB0aGF0IHdlIGp1c3Qgc3BlY2lmaWVkLgoKRmlyc3Qgd2UgdXNlIHRoZSBgd29ya2Zsb3coKWAgZnVuY3Rpb24gb2YgdGhlIGB3b3JrZmxvd3NgIHBhY2thZ2UgdG8gY3JlYXRlIGEgd29ya2Zsb3cuCgpUaGVuIHdlIGFkZCBvdXIgcmVjaXBlIHdpdGggdGhlIGBhZGRfcmVjaXBlKClgIGZ1bmN0aW9uIGFuZCB3ZSBhZGQgb3VyIG1vZGVsIHdpdGggdGhlIGBhZGRfbW9kZWwoKWAgZnVuY3Rpb24gb2YgdGhlIGB3b3JrZmxvd3NgIHBhY2thZ2UuIAoKTm90ZTogV2UgZG8gbm90IG5lZWQgdG8gYWN0dWFsbHkgcHJlcCBvdXIgcmVjaXBlIGJlZm9yZSB1c2luZyB3b3JrZmxvd3MhCgpgYGB7cn0KUE1fd2Zsb3cgPC13b3JrZmxvd3M6OndvcmtmbG93KCkgJT4lCiAgICAgICAgICAgd29ya2Zsb3dzOjphZGRfcmVjaXBlKHNpbXBsZV9yZWMpICU+JQogICAgICAgICAgIHdvcmtmbG93czo6YWRkX21vZGVsKGxtX1BNX21vZGVsKQpQTV93ZmxvdwpgYGAKCkFoLCBuaWNlLiBOb3RpY2UgaG93IGl0IHRlbGxzIHVzIGJvdGggd2hhdCBvdXIgcHJlcHJvY2Vzc2luZyBzdGVwcyBhcmUgYW5kIG91ciBtb2RlbCBzcGVjaWZpY2F0aW9ucy4KCk5vdyB3ZSBjYW4gcHJlcGFyZSB0aGUgcmVjaXBlIChlc3RpbWF0ZSB0aGUgcGFyYW1ldGVycykgYW5kIGZpdCB0aGUgbW9kZWwgdG8gb3VyIHRyYWluaW5nIGRhdGEgYWxsIGF0IG9uY2U6CgpgYGB7cn0KUE1fd2Zsb3dfZml0IDwtIGZpdChQTV93ZmxvdywgZGF0YSA9IHRyYWluX3BtKQoKYGBgCgoKCgo+IGNoZWNrX25ld192YWx1ZXM6IFRoaXMgY2hlY2sgd2lsbCBicmVhayB0aGUgYmFrZSBmdW5jdGlvbiBpZiBhbnkgb2YgdGhlIGNoZWNrZWQgY29sdW1ucyBkb2VzIGNvbnRhaW4gdmFsdWVzIGl0IGRpZApub3QgY29udGFpbiB3aGVuIHByZXAgd2FzIGNhbGxlZCBvbiB0aGUgcmVjaXBlLiBJZiB0aGUgY2hlY2sgcGFzc2VzLCBub3RoaW5nIGlzIGNoYW5nZWQgdG8gdGhlIGRhdGEKCj4gY2hlY2tfcmFuZ2UgY3JlYXRlcyBhIHNwZWNpZmljYXRpb24gb2YgYSByZWNpcGUgY2hlY2sgdGhhdCB3aWxsIGNoZWNrIGlmIHRoZSByYW5nZSBvZiBhIG51bWVyaWMKdmFyaWFibGUgY2hhbmdlZCBpbiB0aGUgbmV3IGRhdGEuCgoKCltwYXJhbWV0ZXIgdnMgaHlwZXJwYXJhbWV0ZXJdKGh0dHBzOi8vd3d3LmRhdGFjYW1wLmNvbS9jb21tdW5pdHkvdHV0b3JpYWxzL3BhcmFtZXRlci1vcHRpbWl6YXRpb24tbWFjaGluZS1sZWFybmluZy1tb2RlbHMpe3RhcmdldD0iX2JsYW5rIn0KCgoKcHJlcHBlciBmb3IgY3Jvc3MgdmFsaWRhdGlvbj8KCgpGcm9tIEJyb29tOgoKYWxsb3dzIGZvciBhbiBlYXN5L3RpZHkgd2F5IHRvIGxvb2sgYXQgdGhlIGZpdHRlZCBtb2RlbAp0aWR5KCkgZ3JhYnMgdGhlIGNvZWZmaWNpZW50cyBmcm9tIHRoZSBtb2RlbApnbGFuY2UoKSBzdW1tYXJpemVzIHRoZSBtb2RlbCBmaXQKYXVnbWVudCgpIGdpdmVzIDE1MCByb3cgb2JzZXJ2YXRpb24gbGV2ZWwgc3VtbWFyeQoKCgpncmVhdCBibG9nIGFib3V0IGNyb3NzIHZhbGlkYXRpb24gZXRjIGh0dHBzOi8vdG93YXJkc2RhdGFzY2llbmNlLmNvbS90cmFpbi10ZXN0LXNwbGl0LWFuZC1jcm9zcy12YWxpZGF0aW9uLWluLXB5dGhvbi04MGI2MWJlY2E0YjYKCiMjIERhdGEgVmlzdWFsaXphdGlvbgoKIyMgU3VtbWFyeQoKV2UgaGF2ZSBldmFsdWF0ZWQgYXZlcmFnZSBjb25zdW1wdGlvbiBlc3RpbWF0ZXMgb2YgMTUgZGlldGFyeSBmYWN0b3JzIHdpdGggcHJvYmFibHkgbm9uLWNvbW11bmljYWJsZSBkaXNlYXNlIChOQ0QpIHJpc2sgZnJvbSAxOTUgZGlmZmVyZW50IGNvdW50cmllcyBhcm91bmQgdGhlIHdvcmxkLiBUbyBkbyBzbyB3ZSBpbXBvcnRlZCBkYXRhIGZyb20gYSBQREYgdXNpbmcgdGhlIGBwZGZ0b29sc2AgcGFja2FnZSwgYXMgd2VsbCBhcyBkYXRhIGZyb20gdHdvIENTViBmaWxlcyB1c2luZyByZWFkci4gV2UgdXNlZCBgdGlkeXZlcnNlYCBwYWNrYWdlcyBzdWNoIGFzIGBkcGx5cmAsIGBzdHJpbmdyYCwgYW5kIGB0aWR5YCB0byBjbGVhbiBhbmQgam9pbiB0aGUgZGF0YSBmcm9tIHRoZSBQREYgd2l0aCB0aGUgQ1NWIGZpbGVzLiAKCldlIGxlYXJuZWQgdGhhdCBSZWdyZXNzaW9uIGlzIGEgcG93ZXJmdWwgYW5kIGZsZXhpYmxlIHN0YXRpc3RpY2FsIHRvb2wgdGhhdCBzaW1wbGlmaWVzIG9yIGVzdGltYXRlcyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHZhcmlhYmxlcyB1c2luZyBhIG1hdGhlbWF0aWNhbCBtb2RlbC4gV2UgbGVhcm5lZCBhYm91dCB0aGUgdXRpbGl0eSBvZiB0aGUgcmVncmVzc2lvbiB0byBjb21wYXJlIGdyb3VwcywgbG9vayBmb3IgYXNzb2NpYXRpb25zIGJldHdlZW4gdmFyaWFibGVzLCBhbmQgdG8gcHJlZGljdCBvdXRjb21lcyBiYXNlZCBvbiBtdWx0aXBsZSBwcmVkaWN0b3Igb3IgZXhwbGFuYXRvcnkgdmFyaWFibGVzLiBXZSB0aGVuIGNvbXBhcmVkIHRoaXMgdG8gb3RoZXIgcG9wdWxhciB0ZXN0cyBsaWtlIHRoZSAkdCQtdGVzdCBhbmQgdGhlIEFOT1ZBLiBXZSBsZWFybmVkIHRoYXQgdGhlc2UgdGVzdHMgYXJlIGFjdHVhbGx5IGVxdWl2YWxlbnQgdG8gc3BlY2lhbGl6ZWQgdHlwZXMgb2YgcmVncmVzc2lvbnMuCgpPdXIgc3RhdGlzdGljYWwgYW5hbHlzaXMgZm9jdXNlZCBvbiBldmFsdWF0aW5nIGRpZmZlcmVuY2VzIGluIHRoZSBjb25zdW1wdGlvbiBvZiByZWQgbWVhdCBhcm91bmQgdGhlIHdvcmxkIGJldHdlZW4gZmVtYWxlcyBhbmQgbWFsZXMgYW5kIGFjcm9zcyBkaWZmZXJlbnQgYWdlIGdyb3Vwcy4gRmlyc3Qgd2UgbG9va2VkIGF0IHRoZSBhc3N1bXB0aW9ucyBvZiBbJHQkLXRlc3RzXShodHRwczovL3N0YXR0cmVrLmNvbS9zdGF0aXN0aWNzL2RpY3Rpb25hcnkuYXNweD9kZWZpbml0aW9uPXR3by1zYW1wbGUlMjAkdCQtdGVzdCl7dGFyZ2V0PSJfYmxhbmsifSBhbmQgcmVncmVzc2lvbnMsIGFuZCBkZXRlcm1pbmVkIHRoYXQgdGhlIHJlbGF0aXZlIHBlcmNlbnRhZ2UgZGF0YSBvZiByZWQgbWVhdCBjb25zdW1wdGlvbiB0byB0aGUgb3B0aW1hbCBndWlkZWxpbmUgc3VnZ2VzdGVkIGFtb3VudCB3YXMgcmlnaHQgc2tld2VkLiBXZSBsZWFybmVkIHRoYXQgd2UgY291bGQgdHJhbnNmb3JtIHRoZSBkYXRhIGJ5IHRha2luZyB0aGUgbG9nIG9mIHRoZXNlIHZhbHVlcyB0byBhY2hpZXZlIG1vcmUgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgZGF0YS4gVG8gY29tcGFyZSBtYWxlcyBhbmQgZmVtYWxlcyB3ZSB1c2VkIGEgJHQkLXRlc3QgYW5kIGxlYXJuZWQgdGhhdCBhICR0JC10ZXN0IGlzIGEgc3BlY2lhbGl6ZWQgZm9ybSBvZiBhIGxpbmVhciByZWdyZXNzaW9uLiBUbyBjb21wYXJlIHRoZSAxNSBkaWZmZXJlbnQgYWdlIGdyb3VwcyB3ZSB1c2VkIGFuIEFOT1ZBIGFuZCBsZWFybmVkIHRoYXQgdGhlIEFOT1ZBIGlzIGFsc28gYSBzcGVjaWFsaXplZCBmb3JtIG9mIGxpbmVhciByZWdyZXNzaW9uLiBXZSBleGFtaW5lZCBob3cgd2Ugb2J0YWluZWQgdGhlIHNhbWUgcmVzdWx0cyB1c2luZyBlaXRoZXIgc3RhdGlzdGljYWwgdGVzdC4gVGhpcyB3YXMgYWxzbyB0aGUgY2FzZSBpZiB3ZSBsb29rZWQgYXQgdGhlIGVmZmVjdCBvZiBnZW5kZXIgYW5kIGNvbnRyb2xsZWQgZm9yIHRoZSBwYWlyZWQgY291bnRyeSBzdHJ1Y3R1cmUgaW4gdGhlIGRhdGEgYnkgZWl0aGVyIGluY2x1ZGluZyBgbG9jYXRpb25fbmFtZWAgaW4gdGhlIG1vZGVsIGFzIGFub3RoZXIgdGVybSBvciBieSB1c2luZyBhIG1peGVkIGVmZmVjdHMgbW9kZWwgdG8gY29udHJvbCBmb3IgdGhpcyBzdHJ1Y3R1cmUgYXMgYSByYW5kb20gZWZmZWN0IGJ1dCBub3Qgc3BlY2lmaWNhbGx5IHRlc3QgZm9yIHRoZSBpbmZsdWVuY2Ugb2YgYGxvY2F0aW9uX25hbWVgIG9uIHJlZCBtZWF0IGNvbnN1bXB0aW9uIGVzdGltYXRlcy4gV2UgbGVhcm5lZCB0aGF0IGZpeGVkIGVmZmVjdHMgYXJlIHRob3NlIHRoYXQgd2Ugd2lzaCB0byBldmFsdWF0ZSwgd2hpbGUgcmFuZG9tIGVmZmVjdHMgYXJlIHRob3NlIHRoYXQgbWF5IGluZmx1ZW5jZSB0aGUgcmVsYXRpb25zaGlwcyBvZiBvdXIgdmFyaWFibGVzIG9mIGludGVyZXN0IGJ1dCB0aGF0IHdlIGRvIG5vdCB3aXNoIHRvIGFjdGl2ZWx5IGV2YWx1YXRlLiBVc2luZyB0aGVzZSB0ZXN0cyBhbmQgbW9kZWxzLCB3ZSBkZXRlcm1pbmVkIHRoYXQgbWFsZXMgY29uc3VtZSBtb3JlIHJlZCBtZWF0IHRoYW4gd29tZW4gb24gYXZlcmFnZSBhcm91bmQgdGhlIHdvcmxkLiAKCk91ciBBTk9WQSBhbmFseXNpcyBvZiBhZ2UgZGV0ZXJtaW5lZCB0aGF0IGluZGVlZCB0aGVyZSBhdCBsZWFzdCBvbmUgYWdlIGdyb3VwIGNvbnN1bWVkIGEgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgYW1vdW50IG9mIHJlZCBtZWF0IGNvbXBhcmVkIHRvIHRoZSBvdGhlciBhZ2UgZ3JvdXBzLCBhbmQgdGhpcyB3YXMgc3RpbGwgdGhlIGNhc2Ugd2hlbiB3ZSBjb250cm9sbGVkIGBsb2NhdGlvbl9uYW1lYC4gSG93ZXZlciwgd2UgbGVhcm5lZCB0aGF0IHdlIGNvdWxkIHRoYXQgdGhlIEFOT1ZBIGRvZXMgbm90IHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggYWdlIGdyb3VwcyBhcmUgZGlmZmVyZW50LiBXZSBsZWFybmVkIGhvdyB0aGUgcmVncmVzc2lvbiBob3dldmVyIGNvdWxkIHByb3ZpZGUgc29tZSBjb21wYXJpc29ucyBvZiBkaWZmZXJlbnQgYWdlIGdyb3VwcyByZWxhdGl2ZSB0byB0aGUgcmVmZXJlbmNlIGFnZSBncm91cC4gRnVydGhlcm1vcmUsIG91ciBkYXRhIHZpc3VhbGl6YXRpb25zIGFsbG93ZWQgdXMgdG8gZGV0ZXJtaW5lIHRoYXQgaW4gZ2VuZXJhbCByZWQgbWV0IGNvbnN1bXB0aW9uIGFwcGVhcnMgdG8gYmUgaGlnaGVyIGluIHRoZSB5b3VuZ2VyIGFnZSBncm91cHMgcmVsYXRpdmUgdG8gdGhlIG9sZGVyIGFnZSBncm91cHMuIAoKRmluYWxseSwgd2UgYWxzbyBsb29rZWQgYXQgZGlmZmVyZW5jZXMgaW4gcmVkIG1lYXQgY29uc3VtcHRpb24gYmV0d2VlbiB0aGUgZGlmZmVyZW50IGNvdW50cmllcyBhbmQgc2F3IGluIG91ciBBTk9WQSBhbmFseXNpcyBhbmQgb3VyIHJlZ3Jlc3Npb24gYW5hbHlzaXMgdGhhdCB0aGVyZSB3ZXJlIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzLiBXZSB3ZXJlIGFibGUgdG8gdXNlIGEgcmVncmVzc2lvbiB0aGF0IGluY2x1ZGVkIGBzZXhgLCBgYWdlX2dyb3VwX25hbWVgLCBhbmQgYGxvY2F0aW9uX25hbWVgIHRvIGV2YWx1YXRlIHRoZSBpbmZsdWVuY2Ugb2YgZWFjaCBvZiB0aGUgdGhyZWUgZGVtb2dyYXBoaWMgZmFjdG9ycyBvbiBjb25zdW1wdGlvbiB3aGlsZSBjb250cm9sbGluZyBvciBhY2NvdW50aW5nIGZvciB0aGUgb3RoZXIgdHdvLiBPdXIgcmVzdWx0cyBkZW1vbnN0cmF0ZWQgdGhhdCBhbGwgdGhyZWUgaW5mbHVlbmNlZCBvciB3ZXJlIGFzc29jaWF0ZWQgd2l0aCByZWQgbWVhdCBjb25zdW1wdGlvbi4KCkluIHByZWZvcm1pbmcgb3VyIHN0YXRpc3RpY2FsIGFuYWx5c2VzIHdlIGxlYXJuZWQgYWJvdXQgdGhlIGFzc3VtcHRpb25zIG9mIHRoZSAkdCQtdGVzdCwgdGhlIHJlZ3Jlc3Npb24sIGFuZCB0aGUgQU5PVkEuIFdlIGFsc28gbGVhcm5lZCBhYm91dCBpbXBvcnRhbnQgbWV0aG9kcyB0byB0ZXN0cyB0aGVzZSBhc3N1bXB0aW9ucy4KCiMjIyMgJHQkLXRlc3QgYXNzdW1wdGlvbnM6CgoxKSBOb3JtYWxpdHkgb2YgdGhlIGRhdGEgZm9yIGJvdGggZ3JvdXBzICh0aGlzIGlzIG5vdCBhcyBtdWNoIG9mIGFuIGlzc3VlIGlmIHRoZSBudW1iZXIgb2Ygb2JzZXJ2YXRpb25zIGlzIHJlbGF0aXZlbHkgbGFyZ2UgdG90YWwgbj4zMCAtIGNhbiBldmFsdWF0ZSBieSBwbG90dGluZyB0aGUgZGlzdHJpYnV0aW9uIGFuZCBieSBjcmVhdGluZyBbUS1RIHBsb3RzXShbUS1RIFBsb3RzXShodHRwOi8vb25saW5lc3RhdGJvb2suY29tLzIvYWR2YW5jZWRfZ3JhcGhzL3EtcV9wbG90cy5odG1sKXt0YXJnZXQ9Il9ibGFuayJ9KSkKMikgRXF1YWwgdmFyaWFuY2UgYmV0d2VlbiB0aGUgdHdvIGdyb3VwcyAobWFrZSBzdXJlIHlvdSBkbyB0aGUgY29ycmVjdCB0ZXN0IGlmIHRoZSBkYXRhIGlzIG5vdCBub3JtYWwpCjMpIEJhbGFuY2VkIHNhbXBsZSBzaXplcyBvZiB0aGUgdHdvIGdyb3Vwcwo0KSBJbmRlcGVuZGVudCBvYnNlcnZhdGlvbnMgKG9yIGluZGVwZW5kZW50IHBhaXJlZCBvYnNlcnZhdGlvbnMpCgpXZSBjYW4gZXZhbHVhdGUgaWYgb3VyIGRhdGEgaXMgW25vcm1hbGx5IGRpc3RyaWJ1dGVkXShodHRwczovL3d3dy5waHlzaW9sb2d5Lm9yZy9kb2kvZnVsbC8xMC4xMTUyL2FkdmFuLjAwMDY0LjIwMTcpe3RhcmdldD0iX2JsYW5rIn0gYnkgcGxvdHRpbmcgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYnkgY3JlYXRpbmcgW1EtUSBwbG90c10oW1EtUSBQbG90c10oaHR0cDovL29ubGluZXN0YXRib29rLmNvbS8yL2FkdmFuY2VkX2dyYXBocy9xLXFfcGxvdHMuaHRtbCl7dGFyZ2V0PSJfYmxhbmsifSB0byBjb21wYXJlIHRoZSBkaXN0cmlidXRpb24gb2Ygb3VyIGRhdGEgdG8gdGhlIHRoZW9yZXRpY2FsIFtub3JtYWwgZGlzdHJpYnV0aW9uXShodHRwczovL3d3dy5waHlzaW9sb2d5Lm9yZy9kb2kvZnVsbC8xMC4xMTUyL2FkdmFuLjAwMDY0LjIwMTcpe3RhcmdldD0iX2JsYW5rIn0uCgo8dT5JZiBvdXIgZGF0YSBpcyBub3Qgbm9ybWFsbHkgZGlzdHJpYnV0ZWQsIHdlIGNhbiBjb25zaWRlciB0aGVzZSBvcHRpb25zOjwvdT4KCjEpIFdlIGNhbiBzdGlsbCBwZXJmb3JtIGEgJHQkLXRlc3QgaWYgb3VyIG4gaXMgbGFyZ2UKMikgV2UgY2FuIHRyYW5zZm9ybSB0aGUgZGF0YSBiZWZvcmUgcGVyZm9ybWluZyBhICR0JC10ZXN0CjMpIFdlIGNhbiB1c2UgYSBub25wYXJhbWV0cmljIHRlc3QgKFdpbGNveG9uIHNpZ25lZCByYW5rIHRlc3QsIHRoZSBXaWxjb3hvbiByYW5rIHN1bSB0ZXN0LCBhbmQgdGhlIFR3by1zYW1wbGUgS29sbW9nb3Jvdi1TbWlybm92IChLUykgdGVzdCkKNCkgV2UgY2FuIHBlcmZvcm0gYSAkdCQtdGVzdCB3aXRoIHJlc2FtcGxpbmcgbWV0aG9kcyAod2hpY2ggc2hvdWxkIGJlIGVzcGVjaWFsbHkgY29uc2lkZXJlZCB3aGVuIHRoZSBncm91cHMgYXJlIGltYmFsYW5jZWQpCgpTZWUgdGhpcyBbY2FzZSBzdHVkeV0oaHR0cHM6Ly9vcGVuY2FzZXN0dWRpZXMuZ2l0aHViLmlvL29jcy1icC1ydXJhbC1hbmQtdXJiYW4tb2Jlc2l0eSl7dGFyZ2V0PSJfYmxhbmsifSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiAkdCQtdGVzdCBhc3N1bXB0aW9ucy4KCldlIGxlYXJuZWQgdGhhdCB3ZSBjYW4gdGVzdCBpZiAyIGdyb3VwcyBoYXZlIGVxdWFsIHZhcmlhbmNlIHVzaW5nOiAgCjEpIHRoZSBGIHRlc3Qgd2l0aCBgdmFyLnRlc3QoKWAgIAoyKSBNb29kJ3MgdGVzdCB1c2luZyBbYG1vb2QudGVzdCgpYF0oaHR0cHM6Ly9maWxlcy5lcmljLmVkLmdvdi9mdWxsdGV4dC9FRDA2NTU1OS5wZGYpICh1c2UgaWYgdGhlIGRhdGEgaXMgbm90IG5vcm1hbGx5IGRpc3RyaWJ1dGVkKSAgCgojIyMjIExpbmVhciByZWdyZXNzaW9uIGFzc3VtcHRpb25zOgoKTCAobGluZWFyKSAtIFRoZXJlIGlzIGEgbGluZWFyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB2YXJpYWJsZXMuICAKSSAoaW5kZXBlbmRlbnQpIC0gVGhlIHNhbXBsZXMgYXJlIGluZGVwZW5kZW50IGZyb20gb25lIGFub3RoZXIuICAKTiAobm9ybWFsKSAtIFRoZSByZXNpZHVhbHMgYXJlIG5vcm1hbGx5IGRpc3RyaWJ1dGVkLiAgCkUgKGVxdWFsIHZhcmlhbmNlcykgLSBUaGUgdmFyaWFuY2Ugb2YgdGhlIHJlc2lkdWFscyBvZiB0aGUgZ3JvdXBzIGlzIHNpbWlsYXIuICAgCkl0IGlzIGFsc28gaW1wb3J0YW50IHRoYXQgcHJlZGljdG9yIHZhcmlhYmxlcyBhcmUgbm90IGNvcnJlbGF0ZWQgd2l0aCBvbmUgYW5vdGhlci4gIAoKIyMjIyBBTk9WQSBhc3N1bXB0aW9uczoKCjEpIE5vcm1hbGl0eSBvZiB0aGUgZGF0YSBmb3IgYWxsIHRlc3RlZCBncm91cHMgKGxlc3Mgb2YgYW4gaXNzdWUgaWYgdGhlIG51bWJlciBvZiBvYnNlcnZhdGlvbnMgaXMgcmVsYXRpdmVseSBsYXJnZSB0b3RhbCBuPjMwKSAKMikgRXF1YWwgdmFyaWFuY2UgYmV0d2VlbiB0aGUgZ3JvdXBzIC0gYWthIEhvbW9nZW5laXR5IG9mIHZhcmlhbmNlIChtYWtlIHN1cmUgeW91IGRvIHRoZSBjb3JyZWN0IHRlc3QgaWYgdGhlIGRhdGEgaXMgbm90IG5vcm1hbCkgCjMpIEJhbGFuY2VkIHNhbXBsZSBzaXplcyBvZiB0aGUgZ3JvdXBzIAo0KSBJbmRlcGVuZGVudCBvYnNlcnZhdGlvbnMgKG9yIGluZGVwZW5kZW50IHBhaXJlZCBvYnNlcnZhdGlvbnMpIAoKV2UgbGVhcm5lZCBhYm91dCB0aHJlZSB0ZXN0cyBmb3IgZXhhbWluaW5nIHRoZSBlcXVhbGl0eSBvZiB2YXJpYW5jZSBvZiAzIG9yIG1vcmUgZ3JvdXBzOgoxKSBbQmFydGxldHQncyB0ZXN0XShodHRwczovL3d3dy5pdGwubmlzdC5nb3YvZGl2ODk4L2hhbmRib29rL2VkYS9zZWN0aW9uMy9lZGEzNTcuaHRtKXt0YXJnZXQ9Il9ibGFuayJ9ICh3b3JrcyB3ZWxsIGlmIHRoZSBkYXRhIGFwcGVhcnMgdG8gYmUgbm9ybWFsbHkgZGlzdHJpYnV0ZWQpIAoyKSBbRmxpZ25lci1LaWxsZWVuXShodHRwOi8vd2lraS5zdGF0LnVjbGEuZWR1L3NvY3IvaW5kZXgucGhwL0FQX1N0YXRpc3RpY3NfQ3VycmljdWx1bV8yMDA3X05vblBhcmFtX1ZhckluZGVwKXt0YXJnZXQ9Il9ibGFuayJ9IHRlc3QgaXMgbm9ucGFyYW1ldHJpYyBhbmQgZG9lcyBub3QgYXNzdW1lIG5vcm1hbGl0eSAKMykgW0xldmVuZSdzIHRlc3RdKGh0dHBzOi8vd3d3Lml0bC5uaXN0Lmdvdi9kaXY4OTgvaGFuZGJvb2svZWRhL3NlY3Rpb24zL2VkYTM1YS5odG0pe3RhcmdldD0iX2JsYW5rIn0sIGlzIG1vcmUgcm9idXN0IHRvIHZpb2xhdGlvbnMgb2Ygbm9ybWFsaXR5IHRoYW4gdGhlIEJhcnRsZXR0J3MgdGVzdCwgYnV0IG5vdCBhcyByb2J1c3QgYXMgdGhlIEZsaWduZXItIEtpbGxlZW4gdGVzdCAKCgpVc2luZyB0aGUgYGdncGxvdDJgIHBhY2thZ2Ugd2Ugd2VyZSBhYmxlIHRvIHZpc3VhbGl6ZSB0cmVuZHMgaW4gdGhlIGRhdGEgYW5kIHRvIGNvbXBhcmUgY29uc3VtcHRpb24gb2YgdGhlc2UgZGlldGFyeSBmYWN0b3JzIGluIHRoZSBVUyB3aXRoIHRoYXQgb2YgdGhlIG90aGVyIGNvdW50cmllcy4KV2Ugc2VlIHRoYXQgdGhlIHBvcHVsYXRpb25zIGluIG1hbnkgY291bnRyaWVzIGFyZSBvdmVyLWNvbnN1bWluZyBmb29kcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggaGVhbHRoIHJpc2sgd2hlbiBvdmVyLWNvbnN1bWVkLiBJbiBwYXJ0aWN1bGFyIHByb2Nlc3NlZCBtZWF0IGFuZCBzdWdhci1zd2VldGVuZWQgYmV2ZXJhZ2VzIGFwcGVhciB0byBiZSB0aGUgbW9zdCBvdmVyIGNvbnN1bWVkLiBJbXBvcnRhbnRseSBib3RoIG9mIHRoZXNlIGFwcGVhciB0byBiZSBjb25zdW1lZCBhdCBoaWdoZXIgcXVhbnRpdGllcyBieSBtYWxlcyBhbmQgeW91bmdlciBhZHVsdHMuIFBlb3BsZSBpbiB0aGUgVVMgIGFwcGVhciB0byBjb25zdW1lIGxlc3Mgc3VnYXItc3dlZXRlbmVkIGJldmVyYWdlcyB0aGFuIG90aGVyIGNvdW50cmllcywgaG93ZXZlciwgcGVvcGxlIGFyZSBzdGlsbCBvdmVyLWNvbnN1bWluZy4gUHJvY2Vzc2VkIG1lYXQgaG93ZXZlciBhcHBlYXJzIHRvIGJlIGVzcGVjaWFsbHkgYmFkIGluIHRoZSBVUy4gSW4gdGVybXMgb2YgZm9vZCB0aGF0IG5lZWQgdG8gYmUgY29uc3VtZWQgaW4gYWRlcXVhdGUgYW1vdW50cyB0byBvdmVyY29tZSBoZWFsdGggcmlzaywgbmVhcmx5IGFsbCBjb3VudHJpZXMgZm9yIGFsbCBmYWN0b3JzIGFyZSBub3QgcmVhY2hpbmcgZ3VpZGVsaW5lIGxldmVscy4gSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgY291bnRyaWVzIGNvbnN1bWluZyBtb3JlIHRoYW4gYWRlcXVhdGUgYW1vdW50cyBvZiBsZWd1bWVzLCB2ZWdldGFibGVzLCBmcnVpdHMgYW5kIGZpYmVyLiBQZW9wbGUgaW4gdGhlIFVTIGFwcGVhciB0byBlYXQgbW9yZSBtaWxrIHByb2R1Y3RzIGFuZCBjb25zdW1lIG1vcmUgb21lZ2EtMyBmYXR0eSBhY2lkIGFuZCBjYWxjaXVtIHJpY2ggZm9vZHMgdGhhbiBvdGhlciBjb3VudHJpZXMuIEFsbCBjb3VudHJpZXMgaW5jbHVkaW5nIHRoZSBVUyBjb25zdW1lIHZlcnkgbG93IGxldmVscyBvZiBwb2x5dW5zYXR1cmF0ZWQgZmF0dHkgYWNpZHMuIFRoZXNlIFtwb2x5dW5zYXR1cmF0ZWQgZmF0dHkgYWNpZHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BvbHl1bnNhdHVyYXRlZF9mYXQpIGFyZSBhYnVuZGFudCBpbiBzZWVkcywgbnV0cywgYXZvY2Fkb3MsIGFzIHdlbGwgYXMgZmlzaC4gTGlrZWx5IHRoZSBsb3cgbGV2ZWwgb2YgY29uc3VtcHRpb24gb2YgbnV0cyBhbmQgc2VlZHMgY29udHJpYnV0ZXMgdG8gdGhlc2UgbG93IHBvbHl1bnNhdHVyYXRlZCBmYXR0eSBhY2lkIGVzdGltYXRlcy4gVGhlIHN1cHBsZW1lbnRhcnkgdGFibGUgaW5jbHVkZWQgaW4gdGhlIGFydGljbGUgc3VnZ2VzdHMgdGhhdCBwb29yIGNvbnN1bXB0aW9uIG9mIHBvbHl1bnNhdHVyYXRlZCBmYXR0eSBhY2lkcyBpcyBhc3NvY2lhdGVkIHdpdGggaXNjaGVtaWMgaGVhcnQgZGlzZWFzZS4gVGhlIGFydGljbGUgdGFrZXMgdGhpcyBkYXRhIGZ1cnRoZXIgdG8gZXZhbHVhdGUgdGhlIGFzc29jaWF0aW9uIG9mIGNvbnN1bXB0aW9uIGxldmVscyBvZiB0aGVzZSBmb29kcyB3aXRoIG1vcnRhbGl0eS4KCkFuYWx5c2VzIGxpa2UgdGhlIG9uZSBpbiBvdXIgY2FzZSBzdHVkeSBhcmUgaW1wb3J0YW50IGZvciBkZWZpbmluZyB3aGljaCBncm91cHMgY291bGQgYmVuZWZpdCB0aGUgbW9zdCBmcm9tIGludGVydmVudGlvbnMsIGVkdWNhdGlvbiwgYW5kIHBvbGljeSBjaGFuZ2VzIHdoZW4gYXR0ZW1wdGluZyB0byBtaXRpZ2F0ZSBwdWJsaWMgaGVhbHRoIGNoYWxsZW5nZXMuIFlvdSBjYW4gc2VlIGluIHRoZSBbYXJ0aWNsZV0oaHR0cHM6Ly93d3cudGhlbGFuY2V0LmNvbS9hY3Rpb24vc2hvd1BkZj9waWk9UzAxNDAtNjczNiUyODE5JTI5MzAwNDEtOCl7dGFyZ2V0PSJfYmxhbmsifSBob3dldmVyIHRoYXQgbWFueSBhZGRpdGlvbmFsIGNvbnNpZGVyYXRpb25zIHdvdWxkIGJlIGludm9sdmVkIHRvIHBlcmZvcm0gYSBtb3JlIHRob3JvdWdoIGFuYWx5c2lzIHRvIGFkZXF1YXRlbHkgdW5kZXJzdGFuZCB0aGUgZGF0YSBlbm91Z2ggdG8gcmVjb21tZW5kIHBvbGljeSBjaGFuZ2VzLgoKCiMjIyBTdWdnZXN0ZWQgSG9tZXdvcmsKClN0dWRlbnRzIGNhbiBldmFsdWF0ZSBjb25zdW1wdGlvbiBlc3RpbWF0ZXMgb2YgYW5vdGhlciBkaWV0YXJ5IGZhY3RvciBiZXNpZGVzIHJlZCBtZWF0LgoKIyMjIEhlbHBmdWwgTGlua3MKCnJldmlldyBvZiBbdGlkeW1vZGVsc10oaHR0cHM6Ly9ydmlld3MucnN0dWRpby5jb20vMjAxOS8wNi8xOS9hLWdlbnRsZS1pbnRyby10by10aWR5bW9kZWxzLyl7dGFyZ2V0PSJfYmxhbmsifSAKCmd1aWRlIGZvciBbcHJlcHJvY2Vzc2luZyB3aXRoIHJlY2lwZXNdKGh0dHA6Ly93d3cucmViZWNjYWJhcnRlci5jb20vYmxvZy8yMDE5LTA2LTA2X3ByZV9wcm9jZXNzaW5nLykKCltndWlkZV0oaHR0cHM6Ly9icmlhdHRlLmdpdGh1Yi5pby9nZ2NvcnIvKSBmb3IgdXNpbmcgR0dhbGx5IHRvIGNyZWF0ZSBjb3JyZWxhdGlvbiBwbG90cwpbZ3VpZGVdKGh0dHBzOi8vd3d3LnRpZHl2ZXJzZS5vcmcvYmxvZy8yMDE4LzExL3BhcnNuaXAtMC0wLTEvKSBmb3IgdXNpbmcgcGFyc25pcCB0byB0cnkgZGlmZmVyZW50IGFsZ29yaXRobXMgb3IgZW5naW5lcwpbcmVjaXBlIGZ1bmN0aW9uc10oaHR0cHM6Ly90aWR5bW9kZWxzLmdpdGh1Yi5pby9yZWNpcGVzL3JlZmVyZW5jZS9pbmRleC5odG1sKQoKPHU+VGVybXMgYW5kIGNvbmNlcHRzIGNvdmVyZWQ6PC91PiAgCgpbVGlkeXZlcnNlXShodHRwczovL3d3dy50aWR5dmVyc2Uub3JnLyl7dGFyZ2V0PSJfYmxhbmsifSAgCltSU3R1ZGlvIGNoZWF0c2hlZXRzXShodHRwczovL3JzdHVkaW8uY29tL3Jlc291cmNlcy9jaGVhdHNoZWV0cy8pe3RhcmdldD0iX2JsYW5rIn0gIApbSW5mZXJlbmNlXShodHRwczovL3d3dy5icml0YW5uaWNhLmNvbS9zY2llbmNlL2luZmVyZW5jZS1zdGF0aXN0aWNzKXt0YXJnZXQ9Il9ibGFuayJ9ICAKW1JlZ3Jlc3Npb25dKGh0dHBzOi8vbGluZGVsb2V2LmdpdGh1Yi5pby90ZXN0cy1hcy1saW5lYXIvKXt0YXJnZXQ9Il9ibGFuayJ9ICAKW0RpZmZlcmVudCB0eXBlcyBvZiByZWdyZXNzaW9uXShodHRwczovL3d3dy5hbmFseXRpY3N2aWRoeWEuY29tL2Jsb2cvMjAxNS8wOC9jb21wcmVoZW5zaXZlLWd1aWRlLXJlZ3Jlc3Npb24vKXt0YXJnZXQ9Il9ibGFuayJ9ICAKW09yZGluYXJ5IGxlYXN0IHNxdWFyZXMgbWV0aG9kXShodHRwOi8vc2V0b3NhLmlvL2V2L29yZGluYXJ5LWxlYXN0LXNxdWFyZXMtcmVncmVzc2lvbi8pe3RhcmdldD0iX2JsYW5rIn0gIApbUmVzaWR1YWxdKGh0dHBzOi8vd3d3LnN0YXRpc3RpY3Nob3d0by5kYXRhc2NpZW5jZWNlbnRyYWwuY29tL3Jlc2lkdWFsLyl7dGFyZ2V0PSJfYmxhbmsifSAgCgo8dT5QYWNrYWdlcyB1c2VkIGluIHRoaXMgY2FzZSBzdHVkeTogPC91PgoKIFBhY2thZ2UgICB8IFVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLSB8LS0tLS0tLS0tLS0tLQpbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2plbm55YmMvaGVyZV9oZXJlKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICAgIHwgdG8gZWFzaWx5IGxvYWQgYW5kIHNhdmUgZGF0YSAgCltyZWFkcl0oaHR0cHM6Ly9yZWFkci50aWR5dmVyc2Uub3JnLyl7dGFyZ2V0PSJfYmxhbmsifSAgICAgIHwgdG8gaW1wb3J0IHRoZSBDU1YgZmlsZSBkYXRhICAKW2RwbHlyXShodHRwczovL2RwbHlyLnRpZHl2ZXJzZS5vcmcvKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICAgfCB0byBhcnJhbmdlL2ZpbHRlci9zZWxlY3QvY29tcGFyZSBzcGVjaWZpYyBzdWJzZXRzIG9mIHRoZSBkYXRhICAKW3NraW1yXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvc2tpbXIvaW5kZXguaHRtbCl7dGFyZ2V0PSJfYmxhbmsifSAgICAgIHwgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIGRhdGEgICAKW3N1bW1hcnl0b29sc10oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL3NraW1yL2luZGV4Lmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIGdldCBhbiBvdmVydmlldyBvZiBkYXRhIGluIGEgZGlmZmVyZW50IHN0eWxlICAgCltwZGZ0b29sc10oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL3BkZnRvb2xzL3BkZnRvb2xzLnBkZil7dGFyZ2V0PSJfYmxhbmsifSAgIHwgdG8gcmVhZCBhIFBERiBpbnRvIFIgICAKW21hZ3JpdHRyXShodHRwczovL21hZ3JpdHRyLnRpZHl2ZXJzZS5vcmcvYXJ0aWNsZXMvbWFncml0dHIuaHRtbCl7dGFyZ2V0PSJfYmxhbmsifSAgIHwgdG8gdXNlIHRoZSBgJTw+JWAgcGlwcGluZyBvcGVyYXRvciAgCltwdXJycl0oaHR0cHM6Ly9wdXJyci50aWR5dmVyc2Uub3JnLyl7dGFyZ2V0PSJfYmxhbmsifSAgICAgIHwgdG8gcGVyZm9ybSBmdW5jdGlvbnMgb24gYWxsIGNvbHVtbnMgb2YgYSB0aWJibGUgICAKW3RpYmJsZV0oaHR0cHM6Ly90aWJibGUudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgIHwgdG8gY3JlYXRlIGRhdGEgb2JqZWN0cyB0aGF0IHdlIGNhbiBtYW5pcHVsYXRlIHdpdGggIGRwbHlyL3N0cmluZ3IvdGlkeXIvcHVycnIgIApbdGlkeXJdKGh0dHBzOi8vdGlkeXIudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIHNlcGFyYXRlIGRhdGEgd2l0aGluIGEgY29sdW1uIGludG8gbXVsdGlwbGUgY29sdW1ucyAKW2dncGxvdDJdKGh0dHBzOi8vZ2dwbG90Mi50aWR5dmVyc2Uub3JnLyl7dGFyZ2V0PSJfYmxhbmsifSAgICB8IHRvIG1ha2UgdmlzdWFsaXphdGlvbnMgd2l0aCBtdWx0aXBsZSBsYXllcnMgIAoKCkRvIEkgbmVlZCB0byB0YWxrIGFib3V0IG1hY2hpbmUgbGVhcm5pbmcgaW4gZ2VuZXJhbCBtb3JlLi4uIGNsYXNzaWZpY2F0aW9uIHZzIHByZWRpY3Rpb24/